Iは行 - > foobarに(文字列( "テキスト")+ anotherString)
foobar(string("text")+anotherString);
foobarには、A期待文字列に文字列を変換すると思われるコードの行を有しますstd :: stringを引数として使用
このようにして変換が行われたことはありません... "text"ではどの関数が呼び出されていますか?それともキャストのトリッキーな方法ですか?
Iは行 - > foobarに(文字列( "テキスト")+ anotherString)
foobar(string("text")+anotherString);
foobarには、A期待文字列に文字列を変換すると思われるコードの行を有しますstd :: stringを引数として使用
このようにして変換が行われたことはありません... "text"ではどの関数が呼び出されていますか?それともキャストのトリッキーな方法ですか?
std::string
は、私が前に見てきた確信している(nullで終わると仮定)、チャーの配列を取るコンストラクタ*、しています
std::string s1 = "hello world";
std::string s2("also hello world"); // "same thing", essentially
のでstd::string("test")
はちょうど値"test"
との一時的な文字列オブジェクトを作成します。
さらに、とconst char *
の空き文字列は、文字列にchar配列のデータを追加します(ヌル終端と見なします)。
同じ効果(つまり、2つの文字列を含む一時的な文字列を連結したもの)の場合は、同等の意味でstd::string("test").append(anotherString)
と書くことができます。
std::string
でサポートされている操作の一覧は、manualを参照してください。
*)またはむしろ、「文字の配列の最初の要素へのポインタ」
ハハ、+1 CYAの脚注のために:-) – paxdiablo
@paxdiablo:Hehe ..しかし重大な点があります:コンストラクタはテンプレートではありません* unsigned int N> string(char const(&)[N] ) 'ではなく' string(char *) 'なので、本当に配列は必要ありません。あなたが望むなら、 'string(std :: decay(" test "))'も同様に動作します。 –
...準備が整ったCYAは、おそらく自由演算子+対メンバー演算子+で展開されますが、時間と場所はあります。 –
string("text")
そのコンストラクタを呼び出し、それに"text"
を通過させることによって、一時的なオブジェクトの文字列を作成します。 +anotherString
部分は、一時オブジェクトの "operator +"メンバ関数を呼び出します。このメンバ関数は、文字列オブジェクトも返します。 最後に、foobarが呼び出され、この後者の文字列オブジェクトが渡されます。
それは全く同じである:これは
を助けている場合、「foobarには、引数としてのstd ::文字列を期待」した場合、これは削除し、そのタグ:-) Cの質問ではありません
。 – paxdiablo