私はちょうど機能書いた:std :: stringはどのようにこのトリックを管理しますか?
void doSomeStuffWithTheString(const std::string& value) {
...
std::string v = value;
std::cout << value.c_str();
...
}
をしかし、私は
doSomeStuffWithTheString("foo");
でこれを呼び出し、それが動作します。だから、私はこの(std :: stringの暗黙的なインスタンスを初期化するconst char *)を動作すると考えていただろう値が渡される必要がありますが、この場合は(const)参照渡されます。
参照がconstの場合、const char *からインスタンス化された暗黙の一時的なstd :: stringですか?もしそうでなければ、これはどうやって動くのでしょうか?
EDIT機能が1コンパイラを選択します
void doSomeStuffWithTheString(const char* value);
でオーバーロードされた場合に何が起こるか
?
あなたはかなりあなた自身の質問に答えました:) – pezcode
興味深い、それを知らなかった。オブジェクトが持つ必要があるのは、そのような暗黙的なコンストラクタがconst-by-ref呼び出しで発生することです(それを回避する方法) – lurscher
プログラムが不正です: 'std :: string = value;'は無効であり、あなたのコンパイラによって拒否されるべきです。 –