我有这个功能:
Triangle& Triangle::get_largest_triangle(const Triangle& t) const
{
float area_this = get_area();
float area_other = t.get_area();
if (area_other > area_this)
return *this;
else
return t;
}
这不起作用,除非我声明返回的 Triangle 为常量,即:
const Triangle& Triangle::get_largest_triangle(const Triangle& t) const
这是为什么?我是 C++ 的新手,但据我所知,“this”和参数列表中的对象都没有在函数中更改,所以我真的看不出问题是什么。
例如如果我想在运行此函数后更改存储在最大三角形中的某些值怎么办?
最佳答案
此函数返回对 Triangle 的非常量引用。这意味着调用者可以修改返回的对象。但它要么返回对自身的引用(由于函数声明,它是 const),要么返回对函数参数的引用(也是 const)。所以编译器不会允许它,因为你正在使一个 const 对象成为非 const。
您的选择是更改函数签名以返回一个常量:
const 三角形& 三角形::get_largest_triangle(const 三角形& t) const
或者使方法成为非常量并采用非常量引用:
Triangle& Triangle::get_largest_triangle(Triangle& t)
关于c++ - 函数 const 返回类型 : invalid initialisation of reference of type,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34886692/