const int&和const之间的区别是什么?和int&

时间:2016-02-23 06:45:13

标签: c++ compiler-errors

我有3个问题。

1.流动的2个代码之间有什么区别?

//why no errors during compiling as flowing
const int& get3() {
    return 3;
}

//get a compiler error, says: 'return': cannot convert from 'int' to 'int &'
//and that's understandable
int& get3() {
    return 3;
}

2.为什么第一个可以编译?

3.当我运行第一个时,我得到了奇怪的结果:

error image

那是为什么?

如果有人能给我一些提示,我会非常感激。

2 个答案:

答案 0 :(得分:3)

使用int& get3(),您可以执行get3() = 5

这将设置函数get3返回其引用的变量的值为5

由于3是一个常量值,没有地址可用作参考,因此会出现编译错误。

此类函数通常返回对类成员变量的引用。

答案 1 :(得分:1)

  1. 第一个实际上确定,即使它编译。它返回对本地临时的引用,这是一个未定义的行为(因为该函数退出后该临时函数被销毁,因此您将获得一个悬空引用)。编译器应该通过发出警告告诉你这个问题。

    基本上它等同于以下内容:

    const int& get3() {
        const int& x = 3; // bind const reference to a temporary, OK
        return x; // return a reference to a temporary, UB
    }
    

    这也回答了你的第三个问题:

  2. 因为您的代码中有UB。

  3. 我还建议您阅读this brilliant answer