Biến tĩnh được lưu trong một phần khác của bộ nhớ so với bất kỳ phiên bản nào của lớp. Điều này là bởi vì họ không phải là một phần của một thể hiện của bất kỳ lớp nào.
Mã bên dưới biên dịch vì hàm t không bao giờ được gọi.
class TT
{
private:
static int i;
public:
void t()
{
i=0;
}
};
int main(int argc, char *argv[])
{
qWarning() << "hi";
TT * t = new TT();
//t->t();
return 0;
}
Tuy nhiên, mã này không complie, vì t được gọi là
class TT
{
private:
static int i;
public:
void t()
{
i=0;
}
};
int main(int argc, char *argv[])
{
qWarning() << "hi";
TT * t = new TT();
t->t();
return 0;
}
Bạn được phép có tài liệu tham khảo không xác định bạn không sử dụng trong C++ (và C cho rằng vấn đề). Đối với một số lý do, tôi không chắc chắn, trình biên dịch dường như nghĩ rằng mã này được tham chiếu i, khi các công cụ trên tuân thủ đã không tham chiếu nó cho đến khi được gọi (bất kỳ ý tưởng là tại sao)?
class TT
{
private:
static int i;
public:
void t();
};
//int TT::i = 0;
void TT::t(){
i=0;
}
chức năng Ví dụ, với các tĩnh định nghĩa:
class TT
{
private:
static int i;
public:
void t();
};
int TT::i = 0;
void TT::t(){
i=0;
}
Nguồn
2012-03-23 04:23:22
+1 Đã xóa câu trả lời của tôi vì tôi nhận thấy bạn đã đóng đinh nó. – Lou
nó hoạt động, nhờ – user956159