尝试将临时对象作为非常量引用传递时,例如以下代码中:
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中文网其他相关文章!