2013-07-19 9 views
16

C++で初期化されていないのstd ::文字列変数のサイズは、文字列が、それは次のようになり初期化されていない文字列「名前」とどのようなサイズの値になりますこれは何価値と

std::string name; 

のように定義されている場合は?

+12

です。 – chris

+1

他の人が指摘しているように、デフォルトのコンストラクタが呼び出されましたが、特定の質問に答えるには、 'cout << name'と' cout << name.length() 'を試してみてください。 – Simon

+12

@Simonは何かを試しても、動作が定義されていないか、実装が定義されているかは分かりません(ただし、これは良いスタートでした:-))。 –

答えて

28

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

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

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

を見てみましょう:http://www.cplusplus.com/reference/string/string/string/

EDIT:

EのFFのECTS: C++ 11、§21.4.2/ 1で述べたようにクラスのオブジェクトを構築しますbasic_string。この関数の事後条件は、表に示されている63

11

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

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

標準(C++ 11は、1 /§21.4.2)は結果を記述するデフォルト-構築std::stringであるstd::basic_string(うち

[...]オブジェクトはクラスです。事後条件[...]を表63に示す。

そして表63は述べています:コピー可能であると

data()非NULLポインタが0で、それ
capacity()不定値

+0

「0はそれに追加できる」という部分の意味は何ですか?それは青から外れているようです。 0以外のポインタに0を追加できませんか? – vargonian

-4

値に加算することができnullであり、サイズは0です しかし、文字列が空であるか空でないかを直接調べることができます()

ちょうどあなたがあなたのアプリケーションでそれを確認したい場合には、この

std::string name // Construct an empty string 
if(name.empty()) { // Check if its empty 
    name="something"; 
} 

を行い同様の、より詳細な議論は、それが初期化されていないではありません、ここで initializing strings as null vs. empty string

+1

これは文字列が空であるかどうかをチェックするだけではありません。値を代入します。また、これはどのように質問に答えますか? – jogojapan