私はいくつかの C++ を学んでいて、文字列と整数からの変換について学ぶ部分にたどり着きました。私はコードを見ていました、そしてそれは次のようなことを言いました:
istringstream converter(stringVariable);
「converter」が変数名の場合、その後に () を使用するのはなぜですか?
私はいくつかの C++ を学んでいて、文字列と整数からの変換について学ぶ部分にたどり着きました。私はコードを見ていました、そしてそれは次のようなことを言いました:
istringstream converter(stringVariable);
「converter」が変数名の場合、その後に () を使用するのはなぜですか?
括弧は、istringstream
コンストラクタへの引数を囲みます。
istringstream converter(stringVariable);
// ^^ variable being passed as argument to the
// istringstream constructor
この初期化構文は、パラメーターを持つコンストラクターを持つすべての型に適用されます。これは標準の C++ オブジェクト初期化構文の 1 つですが、注意してください: 特定の状況下では、最も厄介な parseとして知られている方法で、同様の構造が関数宣言として解析される可能性があります。したがって、この
istringstream mystream();
std::istringstream
パラメーターを受け入れないコンストラクターがあっても、関数として解析されます。
istringstream
インスタンスのコンストラクターを呼び出す方法だからです。
現在のバージョンの C++ (C++11) では、次のように記述した方がよいことに注意してください。
istringstream converter{stringVariable};
これは「均一な初期化」構文と呼ばれ、括弧を使用したものとほぼ同じように機能しますが、関数宣言と間違われることはありません (「最も厄介な解析」はありません)。