2013-04-09 15 views
1

編譯器似乎對此沒有任何問題。我可以安全地假設我創建的這種類型的任何對象都具有這些默認值嗎?將struct元素設置爲定義內的值

struct ColorProperties 
{ 
    bool colorRed = true; 
    bool colorBlue = false; 
    bool isRectangle = true; 
}; 

ColorProperties myProperties; 

myProperties將自動包含元素值,如struct?

+2

只有在'C++ 11'。 – BoBTFish 2013-04-09 09:34:15

回答

4

是的,你可以。這是C++ 11功能。實際上它等於

struct ColorProperties { 
    ColorProperties() 
     : colorRed(true), colorBlue(false), isRectangle(true) 
    {} 

    // 
}; 

你可以閱讀這個建議從標準here

行情。

n3376 12.6.2/8

在非委託構造中,如果給定的非靜態數據成員或基類不是由 MEM-初始化-ID指定(包括的情況下其中不存在MEM-初始化列表因爲構造沒有 構造函數初始化程序)和實體不是虛擬基類的抽象類(10.4),那麼

- 如果該實體是一個非靜態數據成員具有括號或等於初始值設定項,實體初始化爲如8.5所述的;

struct A { 
    A(); 
}; 

struct B { 
    B(int); 
}; 

struct C { 
    C() { } 

    A a; 
    const B b; // error: B has no default constructor 
    int i;  // OK: i has indeterminate value 
    int j = 5; // OK: j has the value 5 
};