Trong C và C++ tất cả các biến tĩnh được khởi tạo theo mặc định thành ZERO.Tại sao tôi nên khởi tạo biến lớp tĩnh trong C++?
Đây không phải là trường hợp của các thành viên dữ liệu lớp tĩnh. Tại sao vậy?
#include <iostream>
using namespace std;
int var;
class MyClass
{
public:
static int classVar;
};
int MyClass::classVar = 0; // Why I have to init it here?
int main(void)
{
cout << ::var << endl; // this is initalized to ZERO by default
static int var;
cout << var << endl; // and this also is initalized to Zero
cout << MyClass::classVar << endl;
return 0;
}
Bạn không chắc chắn ** var ** được khởi tạo thành 0. Có thể, đôi khi có thể xảy ra, nhưng không chắc chắn. –
@AlessandroPezzato: Trên thực tế, tiêu chuẩn rõ ràng về việc xóa bộ nhớ cho tất cả các biến toàn cầu trước khi thực thi khởi tạo động ... ngoài các giá trị được tạo mà giá trị bằng chữ bị ảnh hưởng, những giá trị mà tôi nghĩ có thể bị ảnh hưởng trực tiếp (theo as-if rule) vì nó không thể kiểm soát được. –