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

发布于 2024-10-03 18:50:53 字数 280 浏览 2 评论 0原文

我正在 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 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(3

紫罗兰の梦幻 2024-10-10 18:50:53

这应该无法编译。您正在尝试将右值绑定到非常量引用。说 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.

伤感在游骋 2024-10-10 18:50:53

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

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

但我真的没有抓住要点。

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

You could just create a function overload:

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

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?

深海蓝天 2024-10-10 18:50:53

您不能将非常量引用绑定到右值。按值传递可以:

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

或者按常量引用传递:

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

You cannot bind non-const references to rvalues. Passing by value would work:

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

Or passing by reference-to-const:

void foo(const std::wstring& str = std::wstring())
~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文