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

时间:2010-11-21 13:44:46

标签: c++ gcc reference default-value

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

void foo(std::wstring& str = std::wstring())

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

如何初始化默认值?

3 个答案:

答案 0 :(得分:10)

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

void foo() {
    std::wstring str;
    foo(str);
}

但我真的很想念。

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

答案 1 :(得分:8)

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

答案 2 :(得分:3)

您不能将非const引用绑定到rvalues。通过价值传递将起作用:

void foo(std::wstring str = std::wstring())

或通过reference-to-const传递:

void foo(const std::wstring& str = std::wstring())