Это вопрос новичков, но я не могу понять, как это работает.Передача const char вместо std :: string как аргумент функции
Пусть у меня есть функция, как один ниже
void foo(const std::string& v) {
cout << v << endl;
}
И ниже вызов в моей программе.
foo("hi!");
По существу Я передаю const char*
к функции аргумента, константная ссылка на строку, поэтому у меня есть сомнения на этом призыве.
Чтобы передать аргумент по ссылке, могу ли я сказать, что переменная должна существовать, по крайней мере, в течение всего времени вызова? Если это так, где создается строка, которая передается функции?
Я вижу, что он работает: это происходит, потому что компилятор создает временный string
, который передается аргументу или функции?
Вы правы в своих предположениях, он создает временную 'std :: string'. Другим подходом может быть использование 'string_view/string_ref', который может содержать как' const char * ', так и' std :: string' без создания копии (http://www.open-std.org/jtc1/sc22/ wg21/docs/papers/2014/n3849.html или http://www.boost.org/doc/libs/1_55_0/libs/utility/doc/html/string_ref.html) – dalle