#include <iostream>
using namespace std;
class MyStaticClass{
public:
static int value;
MyStaticClass(){
value++;
}
~MyStaticClass(){}
};
int MyStaticClass::value;
void main(){
MyStaticClass::value = 0;
for (int i = 0; i<9; i++)
MyStaticClass *c = new MyStaticClass();
cout << MyStaticClass::value;
system("pause");
}请解释为什么结果是9,当用MyStaticClass *c = new MyStaticClass()替换MyStaticClass c()时,结果更改为0?最后,int MyStaticClass::value;的含义是什么,为什么当我删除这一行时编译器会显示错误?谢谢大家!
发布于 2016-06-20 09:06:46
行int MyStaticClass::value;告诉编译器为static变量value保留存储。如果你不这么做,链接器就会失效。
结果是9,因为for循环体执行了9次:您正在创建9个MyStaticClass的新实例(它实际上不是一个static类,它只有一个static成员)。请注意,您应该对所有这些对象进行delete,否则程序会泄漏内存。
MyStaticClass c();为不接受参数并返回MyStaticClass的函数c声明了一个函数原型:它执行而不是创建对象。这被称为最烦人的解析。由于没有创建对象,所以value保持在0。如果你写MyStaticClass c;的话那就不一样了
https://stackoverflow.com/questions/37918465
复制相似问题