-4
void print_me_bad(std::string& s) {
std::cout << s << std::endl;
}
void print_me_good(const std::string& s) {
std::cout << s << std::endl;
}
std::string hello("Hello");
print_me_bad(hello); // Compiles ok
print_me_bad(std::string("World")); // Compile error
print_me_bad("!"); // Compile error;
print_me_good(hello); // Compiles ok
print_me_good(std::string("World")); // Compiles ok
print_me_good("!"); // Compiles ok
上記のコピーコンストラクタのプログラムで、「ワールド」を渡しているときに2番目のケースでコンパイルエラーが発生するのはなぜですか?コピーコンストラクタでコンパイルエラーが発生する
一時は非constに参照するためにバインドすることはできません。 – songyuanyao
あなたが表示するコードのどこにでもコピーコンストラクションはありません。この問題は、左辺値と右辺値の違い(基本的には一時的なオブジェクト)と、定数オブジェクトと非定数オブジェクトの参照の違いと関係しています。 –
一時オブジェクトを参照にバインドする( 'const'は必須です) - https://herbsutter.com/2008/01/01/gotw-88-a-candidate-for-the-most-important-const/ – Niall