gpt4 book ai didi

c++ - 将函数返回值传递给引用参数导致 GCC 中的编译错误

转载 作者:塔克拉玛干 更新时间:2023-11-03 00:28:25 29 4
gpt4 key购买 nike

假设我声明了这个函数:

class A
{
...
public:
void setRect(Rect & rct);
...
}

成员setRect是这样调用的。

A a;
a.setRect(Some_Func_Return_A_Rect_Object());

gcc 编译器提示找不到匹配的函数 A::setRect(Rect)

如果我这样调用,没问题:

A a;
Rect rct = Some_Func_Return_A_Rect_Object();
a.setRect(rct);

标准对此有说明吗? GCC 只是不允许调用 setRect() 函数的第一种方式?

最佳答案

GCC 是正确的。

如果 Some_Func_Return_A_Rect_Object() 按值返回,即 Rect Some_Func_Return_A_Rect_Object(),那么对于 a.setRect(Some_Func_Return_A_Rect_Object());Some_Func_Return_A_Rect_Object() 返回的是一个临时值,不能绑定(bind)到非常量左值引用(即 Rect &)。

rct 是一个命名变量,可能绑定(bind)到非常量左值引用,因此 a.setRect(rct); 有效。或者,如果可能,您可以将参数类型更改为 const 引用(即 const Rect &),它可以与 temporary 绑定(bind)。

关于c++ - 将函数返回值传递给引用参数导致 GCC 中的编译错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37649131/

29 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com