我其實不知道你是否可以聲明一個類,然後在同一個類的幾個對象中使用一個靜態實例。更具體地說:類的靜態對象?
class State {
public:
State();
static CustomNumberDist normal_dist;
private:
int id;
};
因此,每個州的實例應包含相同的CustomNumberDist實例。我編譯,但我想知道它是否有效,或者稍後我可能遇到問題。
我其實不知道你是否可以聲明一個類,然後在同一個類的幾個對象中使用一個靜態實例。更具體地說:類的靜態對象?
class State {
public:
State();
static CustomNumberDist normal_dist;
private:
int id;
};
因此,每個州的實例應包含相同的CustomNumberDist實例。我編譯,但我想知道它是否有效,或者稍後我可能遇到問題。
聲明(頭文件即.h)中是非常有效的。
但是在定義(.cpp文件),你需要
State::CustomNumberDist normal_dist;
隨着內存將需要的靜態對象,當你到鏈接的階段。
它無效。它應該是這樣的:
class X
{
public:
int normalValue = 5; //NSDMI
static int i;
};
int X::i = 0;
i
需要在內存中的一個位置。在不涉及具體對象的記憶中。
更多信息可以在這裏找到:你給
這是不是有效? – delnan
@delnan在OP的代碼中,'normal_dist'沒有被初始化。它只是宣佈。它的構造函數需要被調用,並且代碼將不會**調用它。 –
「NSDMI」是什麼意思?另外,你應該提到非靜態成員的類內初始化(就像你使用'normalValue'一樣)只能在2011年以後纔有效;或者只是刪除'normalValue',因爲它與問題無關。 –
這是有效的但不確定的問題。 – Mahesh
沒有'State'的實例將包含* CustomNumberDist的實例;將會有一個與'State'類關聯的'CustomNumberDist'實例。 –