1
我想將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