如何初始化具有默认值的类的函数参数
我正在 Linux gcc 环境中工作,我需要初始化具有默认值的类的函数参数。 当我使用类的临时实例执行此操作时,会出现如下错误:“[函数参数] 的默认参数具有类型 [类名]。 例如:
void foo(std::wstring& str = std::wstring())
错误:'std::wstring& 的默认参数str' 的类型为 'std::wstring' PS 此代码使用 VC++ 编译时没有任何错误或警告。
如何初始化默认值?
I'm working on Linux gcc environment and I need to initilize function arguments that are classes with default values.
When I do that with temporary instance of the class it makes an error like this: "default argument for [function argument] has type [class name].
for example:
void foo(std::wstring& str = std::wstring())
error: default argument for 'std::wstring& str' has type 'std::wstring'
P.S. this code is compiled without any error or warning with VC++.
How can I initilize the default value?
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(3)
这应该无法编译。您正在尝试将右值绑定到非常量引用。说 std::wstring const & str 它应该可以工作。
This is supposed to not compile. You are trying to bind an rvalue to a non-const reference. Say
std::wstring const & str
and it should work.你可以只创建一个函数重载:
但我真的没有抓住要点。
编辑:
我的意思是,该函数的目的几乎肯定是修改输入字符串。如果您提供了稍后无法访问的空输入字符串,为什么还要麻烦呢?
You could just create a function overload:
but I really miss the point.
EDIT:
I mean, that function's purpose is almost certainly to modify an input string. If you provide an empty input string that you can't access later, why bother?
您不能将非常量引用绑定到右值。按值传递可以:
或者按常量引用传递:
You cannot bind non-const references to rvalues. Passing by value would work:
Or passing by reference-to-const: