【发布时间】:2018-08-02 15:19:58
【问题描述】:
#include "stdafx.h"
#include <iostream>
class X {
public:
static int n;
};
int X::n; // out-of-class initialization
int _tmain(int argc, _TCHAR* argv[])
{
X x;
std::cout << x.n << std::endl;
return 0;
}
如果没有类外初始化,将会出现未解决的外部链接器错误。
但这是什么原因呢?类声明将其指定为静态成员,我什至没有分配值 n:
int X::n;
当我打印它时,n 的值为 0。所以它是默认初始化的。
如果是这样,那么需要什么以及为什么编译器不能仅从类声明中进行默认初始化?编译器可以清楚地看到类X有一个静态int成员n,为什么需要在类外定义?
谢谢。
【问题讨论】:
-
你在谈论定义。 “初始化”这个词的意思是提供一个初始值,这里不做。
-
人们回答了。通过完全改变问题,您使他们的答案无效,未来来到这里的人将不会真正了解他们的答案与问题有什么关系。如果您有新问题,顶部有一个"ask qeustion" 按钮。我回滚了你的编辑。