2012-03-01 28 views
0

我想了解以下行所做的:使用結構名作爲函數

BStats stats = BStats(); 

的結構定義如下:

struct BStats 
{ 
    unsigned a; 
    unsigned b; 

    BStats& operator+=(const BStats& rhs) 
    { 
     this->a += rhs.a; 
     this->b += rhs.b; 
     return *this; 
    } 
}; 

但我沒有什麼這個想法行呢。它調用默認的構造函數嗎?

回答

3

表達BStats()在標準在5.2.3/2中描述:

表達T(),其中T是一個簡單的類型說明符(7.1.5.2)用於非陣列完整的對象類型或(可能是cv-qualified)void類型,創建一個指定類型的右值,該值被初始化。

也就是說,表達式創建Bstats右值類型是值初始化。你的具體情況,值初始化BStats結構的兩個成員將被設置爲零。

請注意,這不是調用是在其他的答案中提到的默認構造函數的行爲不同,因爲默認的構造函數將不能保證成員被設置爲0。

+1

@basak你會驚訝....但是'BStats統計();'不調用任何構造函數,它甚至不聲明類型的對象'BStats'而是* *宣佈,它沒有參數,並返回一個'BStats'的功能。 Google for *最令人頭疼的解析* – 2012-03-02 01:44:30

0

就像任何類,一個結構具有由編譯器自動創建一個默認的構造函數。在你的情況下,BStats()只是調用默認構造函數,儘管顯式調用是無用的。

0

在C++中類和結構幾乎相同(不同的是,C++結構與公衆,其中一類的是私有的默認屬性類),所以它就像調用構造函數。