這個程序是否應該在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
,和檢查在調試器中的字符串,其內部指針顯示爲垃圾地址。
這個程序是否應該在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
,和檢查在調試器中的字符串,其內部指針顯示爲垃圾地址。
A
是aggregate而C++ 03允許使用支撐初始化程序列表來初始化聚合。如果初始化程序列表爲空,那麼聚合的每個成員都被初始化。
從C++ 03 [dcl.init.aggr]/8
...空初始化的列表可以被用於初始化任何聚集體。如果聚合不是空類,那麼聚合中的每個成員都應使用表格
T()
(5.2.3)的值進行初始化,其中T
代表未初始化成員的類型。
在您的示例中,std::string
成員應該默認初始化。
謝謝。 C++ 98是否一樣? – 2014-10-21 23:54:09
@MattMcNabb我不確定。 C++ 98沒有值初始化,但即使如此,在這種情況下,如果不需要調用「std :: string」的默認構造函數,我會感到非常驚訝。 – Praetorian 2014-10-21 23:58:09
什麼是bcc32? – 2014-10-21 23:30:17
@KerrekSB A編譯器 – 2014-10-21 23:30:30
幾乎沒有,看起來如此:-S – 2014-10-21 23:31:19