class Expression
{
private:
ToStringDisplay* toString;
public:
......
};
// Some code
if (toString == NULL)
// do something
当我调试时,toString引用了一个地址,而不是NULL。
但是如果我改为声明static ToStringDisplay* toString;
,toString引用NULL?
他们之间有什么不同?
答案 0 :(得分:2)
作为C / C ++中的标准,如果没有另外说明,静态变量总是初始化为null。但是,对于非静态局部变量,没有这样的保证
答案 1 :(得分:1)
静态成员变量根据http://www.learncpp.com/cpp-tutorial/811-static-member-variables/初始化为零,其中所有其他变量都是未定义的,除非您明确初始化它们,因此它们将具有之前在内存中的任何随机值。有关静态和非静态差异的解释请参见上述链接。