首页 > 后端开发 > C++ > 为什么我不能在 C 中将临时对象作为非常量引用传递?

为什么我不能在 C 中将临时对象作为非常量引用传递?

Barbara Streisand
发布: 2024-12-15 02:19:10
原创
286 人浏览过

Why Can't I Pass a Temporary Object as a Non-Const Reference in C  ?

将临时对象作为引用传递

尝试将临时对象作为非常量引用传递时,例如以下代码中:

void ProcessFoo(Foo& foo)
{
}

int main()
{
    ProcessFoo(Foo(42)); // Error: Can't pass temporary object as reference
}
登录后复制

g 和 clang 等编译器会引发错误。发生这种情况是因为,根据设计,C 限制将临时变量传递给 const 引用、值参数或右值引用。

此限制背后的基本原理是接收非 const 引用参数的函数打算修改这些参数并返回它们给来电者。在这种情况下传递临时值被认为是无意义的,并且可能表示错误。

要解决此问题,可以使用多种解决方法:

1。使用临时变量

创建一个临时变量并将其作为参数传递给函数:

Foo foo42(42);
ProcessFoo(foo42);
登录后复制

2.使用 const 引用参数声明函数

修改函数声明以接受 const 引用:

void ProcessFoo(const Foo& foo)
{
}
登录后复制

3.按值传递

允许函数按值接受对象:

void ProcessFoo(Foo foo)
{
}
登录后复制

由于编译器实现限制较少,Visual Studio 允许使用此原始代码。

以上是为什么我不能在 C 中将临时对象作为非常量引用传递?的详细内容。更多信息请关注PHP中文网其他相关文章!

来源:php.cn
本站声明
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn
作者最新文章
热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板