Является ли следующий код приемлемым в C++? Если да, то что происходит? Создает ли она строковую переменную temp и передает ее адрес?Можем ли мы передать char * в const string &?
void f(const string& s) {
}
const char kJunk[] = "junk";
f(kJunk);
Является ли следующий код приемлемым в C++? Если да, то что происходит? Создает ли она строковую переменную temp и передает ее адрес?Можем ли мы передать char * в const string &?
void f(const string& s) {
}
const char kJunk[] = "junk";
f(kJunk);
Да, это приемлемо. Компилятор вызовет конструктор string(const char *)
и создаст временное, которое будет привязано к s
на время вызова. Когда падение до f
будет возвращено, временное будет уничтожено.
Аргумент, который является массивом символов, неявно преобразуется во временный объект типа std :: string, а компилятор передает const ссылку на этот временный объект на функцию. Когда оператор с вызовом функции завершит свою работу, временный объект будет удален.
Создает ли временную переменную temp и передает ее адрес?
Да, это эквивалентно:
void f(const std::string& s) {
}
const char kJunk[] = "junk";
f(std::string(kJunk));
Вы пробовали это? – billz
Вам понадобится меньше минуты, чтобы попробовать это ... – Sean
Все в порядке, он создает временный строковый объект и передает ссылку на него. – john