C++ 类的静态对象?

C++ 类的静态对象?,c++,C++,我实际上不知道是否可以声明一个类,然后在同一个类的多个对象之间使用一个静态实例。更具体地说: class State { public: State(); static CustomNumberDist normal_dist; private: int id; }; 因此,每个State实例都应该包含相同的customNumberList实例。我编译了,但我想知道它是否有效,否则我以后可能会遇到问题。它无效。应该是这样的:

我实际上不知道是否可以声明一个类,然后在同一个类的多个对象之间使用一个静态实例。更具体地说:

class State {
    public:
        State();
        static CustomNumberDist normal_dist;
    private:
        int id;   
};

因此,每个State实例都应该包含相同的customNumberList实例。我编译了,但我想知道它是否有效,否则我以后可能会遇到问题。

它无效。应该是这样的:

class X
{
public:
      int normalValue = 5; //NSDMI
      static int i;
};

int X::i = 0;
i
在内存中需要一个位置。在与具体对象无关的记忆中

更多信息可在此处找到:


它是无效的。应该是这样的:

class X
{
public:
      int normalValue = 5; //NSDMI
      static int i;
};

int X::i = 0;
i
在内存中需要一个位置。在与具体对象无关的记忆中

更多信息可在此处找到:

您给出的声明(头文件即.h)完全有效

但是,在定义(.cpp文件)中,您需要

State::CustomNumberDist normal_dist;
当您到达链接阶段时,静态对象将需要内存。

您给出的声明(头文件即.h)完全有效

但是,在定义(.cpp文件)中,您需要

State::CustomNumberDist normal_dist;

当您到达链接阶段时,静态对象将需要内存。

它是有效的,但不确定是否存在问题。
状态的任何实例
都不会包含
CustomNumberList的实例
;将有一个与
状态
类关联的
CustomNumberList
实例。该实例有效,但不确定是否存在问题。
状态
的任何实例都不会包含
CustomNumberList
的实例;将有一个与
状态
类关联的
CustomNumberList
实例。@delnan在OP的代码中,
正常距离
未初始化。刚刚宣布。需要调用它的构造函数,而代码不会调用它。“NSDMI”是什么意思?此外,您可能还应该提到,非静态成员的类内初始化(就像您对
normalValue
所做的那样)仅自2011年起有效;或者干脆删除
normalValue
,因为这与问题无关。@MikeSeymour我猜他指的是“非静态数据成员初始值设定者”,但我不喜欢这种缩写一切的倾向。@delnan在OP的代码中,
normal\u dist
没有初始化。刚刚宣布。需要调用它的构造函数,而代码不会调用它。“NSDMI”是什么意思?此外,您可能还应该提到,非静态成员的类内初始化(就像您对
normalValue
所做的那样)仅自2011年起有效;或者干脆删除
normalValue
,因为这与问题无关。@MikeSeymour我猜他指的是“非静态数据成员初始值设定项”,但我不喜欢这种缩写一切的倾向。