簡體   English   中英

C ++ 03中的初始化初始化

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM