[英]Braced initialization in 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
是聚合 ,C ++ 03允許使用大括號的initializer-list初始化聚合。 如果initializer-list為空,那么將對聚合的每個成員進行值初始化。
從C ++ 03 [dcl.init.aggr] / 8
...空的initializer-list可用於初始化任何聚合。 如果集合不是一個空類,則集合的每個成員都應使用
T()
(5.2.3)形式的值初始化,其中T
表示未初始化成員的類型。
在您的示例中,應默認初始化std::string
成員。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.