2013-11-28 4 views
1

Является ли следующий код приемлемым в C++? Если да, то что происходит? Создает ли она строковую переменную temp и передает ее адрес?Можем ли мы передать char * в const string &?

void f(const string& s) { 
} 
const char kJunk[] = "junk"; 
f(kJunk); 
+3

Вы пробовали это? – billz

+0

Вам понадобится меньше минуты, чтобы попробовать это ... – Sean

+1

Все в порядке, он создает временный строковый объект и передает ссылку на него. – john

ответ

8

Да, это приемлемо. Компилятор вызовет конструктор string(const char *) и создаст временное, которое будет привязано к s на время вызова. Когда падение до f будет возвращено, временное будет уничтожено.

3

Аргумент, который является массивом символов, неявно преобразуется во временный объект типа std :: string, а компилятор передает const ссылку на этот временный объект на функцию. Когда оператор с вызовом функции завершит свою работу, временный объект будет удален.

2

Создает ли временную переменную temp и передает ее адрес?

Да, это эквивалентно:

void f(const std::string& s) { 
} 
const char kJunk[] = "junk"; 
f(std::string(kJunk)); 
Смежные вопросы