是否可以将无名char[]
传递给std::string&
参数?
#include <string>
void func(std::string&);
int main()
{
func("nameless");
return 0;
}
答案 0 :(得分:6)
在您的示例中不正常,因为您使用非const左值引用。将使用字符串文字构建临时字符串,临时字符串只能绑定到const左值引用或rvalue引用。
这些可行:
void func(const std::string&);
void func(std::string&&);
注意:某些编译器(值得注意的VS)会接受您的代码,因为它们允许将非const左值引用绑定到temporaries作为“扩展”。但这不是标准的C ++,所以如果你想编写可移植的代码,你应该避免它。此外,使用它意味着您必须向供应商了解语义是什么。