1

このプログラムは 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になり、デバッガーで文字列を調べると、その内部ポインターはガベージ アドレスのように見えます。

4

1 に答える 1

5

A集合体であり、C++03 では波括弧付きの初期化子リストを使用して集合体を初期化できます。初期化リストが空の場合、集合体の各メンバーは値が初期化されます。

C++03 から[dcl.init.aggr]/8

... 空の初期化リストを使用して、任意の集約を初期化できます。集合体が空のクラスでない場合、集合体の各メンバーはT()(5.2.3) の形式の値で初期化されます。ここTで、 は初期化されていないメンバーの型を表します。

あなたの例では、std::stringメンバーはデフォルトで初期化されている必要があります。

于 2014-10-21T23:41:57.143 に答える