如何初始化具有默认值的类的函数参数

mle*_*977 10 c++ gcc reference default-value

我正在开发Linux gcc环境,我需要初始化具有默认值的类的函数参数.当我使用类的临时实例执行此操作时,它会产生如下错误:"[function argument]的默认参数具有类型[类名].例如:

void foo(std::wstring& str = std::wstring())
Run Code Online (Sandbox Code Playgroud)

错误:'std :: wstring&str'的默认参数类型为'std :: wstring'PS此代码编译时没有任何错误或VC++警告.

如何初始化默认值?

Sim*_*one 10

你可以创建一个函数重载:

void foo() {
    std::wstring str;
    foo(str);
}
Run Code Online (Sandbox Code Playgroud)

但我真的很想念.

编辑:我的意思是,该函数的目的几乎肯定是修改输入字符串.如果您提供以后无法访问的空输入字符串,为什么要这么麻烦?


den*_*ane 10

这应该是不能编译的.您正在尝试将rvalue绑定到非const引用.说std::wstring const & str,它应该工作.


fre*_*low 5

您不能将非常量引用绑定到右值。价值传递会起作用:

void foo(std::wstring str = std::wstring())
Run Code Online (Sandbox Code Playgroud)

或通过引用引用常量:

void foo(const std::wstring& str = std::wstring())
Run Code Online (Sandbox Code Playgroud)