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
В приведенной выше программе конструкторов копирования, почему я получаю ошибки компиляции во втором случае, когда передаю «Мир»?copy constructor дает ошибку компиляции
Временно не может быть привязаны к ссылаться на неконстантный. – songyuanyao
В коде, который вы показываете, нет копии-конструкции. Проблема связана с различием между lvalues и rvalues (в основном, «временными» объектами) и разницей между ссылками на постоянные и непостоянные объекты. –
Привязывание временных объектов к ссылкам (требуется 'const') - https://herbsutter.com/2008/01/01/gotw-88-a-candidate-for-the-most-important-const/ – Niall