Я пытаюсь передать std :: string в качестве аргумента по умолчанию функции.std :: string, разница между строкой val и строкой val = ""
Пытаюсь как следующий
void string_fun(int i, string val = "", int j = 10)
// void string_fun(int i, string val, int j = 10) // <-- error since no default value
{
cout << "values " << endl;
cout << "i: " << i << endl;
cout << "val: " << val << endl;
cout << "j: " << j << endl;
}
void ret_fun()
{
string fun;
cout << "values " << endl;
cout << "fun: " << fun << endl;
}
int main()
{
string_fun(3);
ret_fun();
return 0;
}
Я слышал, что конструктор по умолчанию строки будет инициализировать строку, если это правильно, что будет значением этого? См. Здесь, если я использую только string val
в качестве аргумента функции, я получу ошибку компиляции. Но когда я печатаю строку как val
, так и fun
, я получаю тот же результат. Мой вопрос заключается в том, что делает две строки различными в случае их значений, так как string val = ""
также создает пустую строку.
Рассмотрите возможность использования 'string val = {}' вместо 'string val =" "'. Первый использует конструктор по умолчанию, тогда как последний использует неявный конструктор для создания строки из 'const char *'. Первый может быть более эффективным. В частности, он объявлен с _noexcept_. – nosid