web-dev-qa-db-ja.com

C ++の初期化されていないstd :: string変数の値とサイズ

文字列がこのように定義されている場合

std::string name;

初期化されていない文字列「name」の値とそのサイズはどうなりますか?

27
Charzhard

初期化されていないため、呼び出されるのはデフォルトのコンストラクターです。それから:

空の文字列コンストラクター(デフォルトのコンストラクター):

長さがゼロの文字で、空の文字列を作成します。

ご覧ください: http://www.cplusplus.com/reference/string/string/string/

EDIT:C++ 11、§21.4.2/ 1に記載されているとおり:

効果:クラスbasic_stringのオブジェクトを構築します。この関数の事後条件を表63に示します。

-> Table 63
+-----------------------------------------------------------------------------+
| data()     | a non-null pointer that is copyable and can have 0 added to it |
+------------+----------------------------------------------------------------+
| size()     | 0                                                              |
+------------+----------------------------------------------------------------+
| capacity() | an unspecified value                                            |
+-----------------------------------------------------------------------------+
41

初期化されていないのではなく、そのdefault constructorが呼び出されます。

から http://en.cppreference.com/w/cpp/string/basic_string/basic_string

デフォルトのコンストラクタ。空の文字列を作成します。

15

デフォルトで構築されたユーザー定義型は初期化されていません。デフォルトのコンストラクターは空の文字列を定義します(つまり、"")サイズ/長さがゼロ。

12
Rapptz

標準(C++ 11、§21.4.2/ 1)は、次のように_std::basic_string_(そのうち_std::string_は特殊化)のデフォルト構築の結果を説明しています:

[...]クラス_basic_string_のオブジェクト。事後条件[...]を表63に示します。

そして表63はこう言います:

data()コピー可能で、0を追加できるnull以外のポインター
size() 0
capacity()未指定の値

4
jogojapan