c++ - 函数 const 返回类型 : invalid initialisation of reference of type

标签 c++ function reference constants

我有这个功能:

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/

相关文章:

c++ - 什么时候在编译时计算range::views?

c++ - 如何使用 BOOST_THROW_EXCEPTION?

c - 将函数的结果保存到 C 中的变量中

c++ - 将字符串保存到重载的括号中而不更改对象的字段

c++ - 在二维数组周围做一个圆圈

c++ - 识别直方图中的局部最小值

PHP 函数从 MySQL 数据库中进行选择并将结果传递到数组

c++ - const int function(); 之间的区别和 int func() 常量;

string - Excel 匹配函数与具有 R1C1 引用样式的列

javascript - 内联JS不以html形式调用