std::string,string val 和 string val 之间的区别 = " "
std::string, difference between string val and string val = ""
我正试图将std::字符串作为默认参数传递给函数。
我试着跟随
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 = ""
也会创建一个空白字符串,是什么使这两个字符串在值的情况下不同。
您正在查看函数的参数列表,因此规则不同。std::string
有一个默认构造函数并不重要。
重点是,该语言的参数列表规则确保允许或不允许调用方从调用中省略参数。当给定默认值时,调用者可以省略参数,而使用默认值。如果没有默认值,调用者必须提供适当的参数。
如果你忽略了第二个参数的默认值,你的调用
string_fun(3);
不编译,因为它至少需要两个参数。您甚至可以在调用中使用默认构造函数:
string_fun(3, string());
相关文章:
- cppcheck在const std::string[]上引发警告
- 将std::string传递给WriteConsole API
- 为std::string的某个索引赋值
- std中有类似find_last_of的函数,而string中没有
- 使用 std::string () const 函数启动线程或未来
- 使用char类型将decimal转换为string,将string转换为decimal
- 迭代和比较映射<字符串、矢量<string>> c++ 中的值
- 当我们进行一些操作时,应该使用什么'std::string'或'std::stringstream'?
- 'val' Arduino 错误代码之前的预期'('
- 将向量解析<string>为字符串
- 'string.assign(string.data(), 5)' 是明确定义的还是 UB?
- C++算法标头中,为什么要使用 "!(val < *first)" ?
- 如何更改大小(std::string)
- "string.h"在构建适用于iOS的qt应用程序中找不到消息
- C++:如何将 unix 时间的字符串转换为 *tm?(使用时间错误:"cannot convert 'String' to 'tm*' ")
- std::string 的对象真的可以移动吗?
- 与'operator='不匹配(操作数类型'String'且"void")
- SegFault 同时使用 std::string::operator+= 和函数作为参数
- 无法从 std::string 中提取C++ Unicode 符号
- std::string,string val 和 string val 之间的区别 = " "