2014-10-21 64 views
1

這個程序是否應該在C++ 03中正確初始化字符串?在C++中加載初始化03

#include <iostream> 
#include <string> 

struct A 
{ 
    std::string s; 
}; 

int main() 
{ 
    A a = { }; 
    std::cout << a.s.size() << std::endl; 

} 

使用bcc32 6.70,輸出爲256,和檢查在調試器中的字符串,其內部指針顯示爲垃圾地址。

+1

什麼是bcc32? – 2014-10-21 23:30:17

+0

@KerrekSB A編譯器 – 2014-10-21 23:30:30

+2

幾乎沒有,看起來如此:-S – 2014-10-21 23:31:19

回答

5

Aaggregate而C++ 03允許使用支撐初始化程序列表來初始化聚合。如果初始化程序列表爲空,那麼聚合的每個成員都被初始化。

從C++ 03 [dcl.init.aggr]/8

...空初始化的列表可以被用於初始化任何聚集體。如果聚合不是空類,那麼聚合中的每個成員都應使用表格T()(5.2.3)的值進行初始化,其中T代表未初始化成員的類型。

在您的示例中,std::string成員應該默認初始化。

+0

謝謝。 C++ 98是否一樣? – 2014-10-21 23:54:09

+0

@MattMcNabb我不確定。 C++ 98沒有值初始化,但即使如此,在這種情況下,如果不需要調用「std :: string」的默認構造函數,我會感到非常驚訝。 – Praetorian 2014-10-21 23:58:09