2016-05-01 10 views
4

これは質問ですC++ Primer(第5版)第3.2章、ページ84,85我々は単一イニシャライザを持っている場合C++の初期化で「いくつかの値」とは何ですか?

することは、私たちは、直接または初期化の コピー形式のいずれかを使用することができます。我々は複数の値を使用したい場合は

string s4(10, 'c'); //s4 is "cccccccccc" 
string s5 = "hiya"; // copy initialization 
string s6("hiya"); // direct initialization 
string s7(10, 'c'); // direct initialization; s7 is cccccccccc 

:私たちは、このようなS4の初期化のように、一つの値よりも 以上から変数を初期化するとき、我々は初期の直接型 を使用する必要があります。

、我々は間接的にコピーするには、明示的に(一時的な)オブジェクト を作成することにより、初期のコピー フォームを使用することができます
string s8 = string(10, 'c'); // copy initialization; s8 is cccccccccc 

"いくつかの値の意味"とは何ですか?上記のテキストは明示的にそれを明らかにしていません。そして、私は "単一初期化子"を理解できません。 "複数の値から変数を初期化する"の反対ですか?

+0

http://www.merriam-webster.com/dictionary/several –

+0

「シングルイニシャライザ」は値を使用して文字列オブジェクトを初期化することを理解しています。この場合、コピーと直接初期化の両方を使用できます。しかし、複数の値から初期化する場合、値はs4のように初期化演算子 '() '関数のパラメータであり、最初の値は** 10 **で文字数を示し、2番目の値は**' c ' **重複した文字が 'c'であることを示します。 –

+0

@LightnessRacesinOrbit lol、残念なことにこのケースでは "数"は実際には "複数の"を意味します – Barry

答えて

2

私は、彼らはあなたがコンストラクタに複数の引数を渡したいとき、あなたは一時的にこれらの引数をラップすることなく、コピーの初期化を使用することはできません意味だと思う:

:対

string one1 = "one"; 
string one2("one"); 
string one3 = string("one"); 

string many1(10, 'c'); 
string many2 = string(10, 'c'); 

1つの引数には3つの形式があり、複数の引数には2つのみの形式があります。

2

いくつかの値は、コンストラクタ引数の数を参照します。 10と 'C' -

考えてみましょう...

string s4(10, 'c'); //s4 is "cccccccccc" 

2(すなわち、いくつかの)値があります。割り当てる値はカンマ演算子を持つ式として評価されているので、あなたが... ...などから

string s4 = 10, 'c'; // doesn't work as above 

を同じ動作を得ることができないという状況では

:左手10れます破棄されると、式は単純に 'c'と評価され、文字列コンストラクタの唯一の引数になります。 1つのchar引数をとるコンストラクタはありません。また、charにStandard Conversionを渡すこともできないため、コンパイルエラーが発生します。で

(最も近いコンストラクタが....それは価値があるものは何でものために... ...

である)C++ 11あなたは、単一のstd ::とinitializer_list引数を作成するために括弧を使用することができますあなたは...

basic_string(std::initializer_list<CharT> init, 
       const Allocator& alloc = Allocator()); 

コンストラクタを呼び出すことができます...しかし、あなたはそれが複数の値を持つコンストラクタを呼び出すが、サブ値を含む単一の値いない主張ができた....

0

私からインディアナいくつかの値は、複数の引数を使用して呼び出される初期設定子を指します。

あなたがすでに気づいたように、テキストはこれについて実際にはっきりしていません。

1

10は1つの値です。 'c'は別の値です。一緒に、彼らはstringオブジェクトを構築するために使用される2つの値です。

string s7(10, 'c');を使用することができますが、string s8 = (10, 'c');を使用することはできません。単一のイニシャライザがある場合にのみそのフォームを使用できます。

0

このコンテキストでは、「複数の値」は、コンストラクタに複数の引数があることを意味します。

この暗黙的に1つの文字列引数でコンストラクタを呼び出してコピー初期化されます。この例では

string s5 = "hiya"; 

、二つの引数を持つコンストラクタを明示的に呼び出す必要があります。

string s8 = string(10, 'c'); 
0

「いくつかの価値」の意味は何ですか?

私はその意味が引数の数だと思います。とにかく

、私は初期のコピー形式はできると思う:私たちは、このようなS4の初期化のように、複数の値から変数を初期化すると、我々は初期の直接型を使用する必要があります

list initialization(C++ 11以降)でも "いくつかの値"と共に使用することができます。

string s4 = {10, 'c'}; 
0

本の用語は混乱しています。

string s7(10, 'c'); 

この構造体には、括弧内の値のリストである単一の初期化子が含まれています。この本は、個々の価値がそれぞれ独自のイニシャライザであることを暗示しているようです。これは間違っています。

+0

私はあなたに同意します。私は作者が**単一イニシャライザ**の代わりに***引数の初期化子***をここで使うべきだと思います。そして、** "いくつかの値" **は、 "いくつかの引数" **に置き換えてください。 –

関連する問題