У меня есть несколько вопросов, которые я думаю, будет довольно легко для кого-то с C++ опыт, чтобы ответить, я буду смелым в quesitons для TL; DRC-Style струнам STD :: строка преобразования осветление
Учитывая следующий код:
void stringTest(const std::string &s)
{
std::cout << s << std::endl;
}
int main()
{
stringTest("HelloWorld");
}
Hopefuly кто-то может указать на ошибки в моей мысли процесс здесь:
Почему параметр в stringTest должны быть отмечены сопзЬ при передаче строки C-Style? Не существует ли неявное преобразование в std :: string, которое происходит с использованием его конструктора строки cstyle, поэтому «s» больше не является ссылкой на литерал (и не обязательно является константой).
Кроме того, что б cstyle строка конструктор выглядеть, и как компилятор знает, чтобы вызвать это, увидев:
stringTest("HelloWorld");
ли просто признать строковый литерал быть что-то вроде полукокса * ?
Я наткнулся на эти вопросы, изучая конструкторы копирования. Еще один быстрый quesiton для собственного очищения ...
В случае что-то вроде:
std::string s = "HelloWorld";
ли конструктор cstyle строки используется для создания экземпляра временных зОго :: строки, а затем временная строка скопирован в «s» с использованием конструктора строковых копий?:
std::string(const std::string&);
«Почему параметр в stringTest должен быть помечен как const?» - независимо от того, когда он не нужен, вы хотите создать _all_ ссылки 'const', которые фактически не изменены. – leftaroundabout
@leftaroundabout: Справедливая точка зрения, я непременно возьму это близко к сердцу. – Riken
Возможный дубликат [Как ссылка, не связанная с константой, не может привязываться к временному объекту?] (Http://stackoverflow.com/questions/1565600/how-come-a-non-const-reference-cannot-bind-to -a-time-object) –