为什么我不能在类声明之外初始化非静态成员?

jia*_*afu -2 c++ static-variables

class ClassObject {
public:
    ClassObject();
    virtual ~ClassObject();
private:
    int x;
 };

int ClassObject::x=10;
Run Code Online (Sandbox Code Playgroud)

为什么编译失败?我认为如果可以通过这种方式初始化静态成员,那么对于非静态成员也应该是可能的.

csu*_*fer 5

静态成员很特别.一旦定义了类,它们就会为它们分配一个内存.而且无论我们创建的那个类有多少个对象,所有这些对象都指向同一块内存.

非静态成员不是这种情况.除非您创建该特定类的对象,否则非静态成员不会分配任何内存,因此尝试以上述方式实例化它们会导致编译器错误.