const int& x = 4和const int x = 4之间的差异

时间:2016-09-10 03:22:16

标签: c++ reference const

引用的唯一目的是别名。将引用(引用常量int)分配给整数似乎很荒谬,因为它不是别名(并且它不会给出错误!)。我想它类似于定义一个常量int本身。有什么不同吗?

1 个答案:

答案 0 :(得分:2)

在函数体或文件范围内,唯一的区别是decltype(x)。在一种情况下,它是int const,另一个是int const&

const int & x=7;创建一个值为int的临时匿名7。然后它将引用x绑定到它。临时的生命周期延长到参考的生命周期。这基本上与x是值为const int的{​​{1}}的名称无法区分。

它几乎相同的例外是当绑定发生在对象的构造函数中作为成员初始化的一部分时。在这种情况下,寿命不会延长。

我怀疑你可以通过以下方式诱导这个:

7

上述语法都是非法的或悬挂(我不记得参考标准中是否存在角落情况),同时:

struct Foo{
  int const& x=7;
  Foo(){};
};

既合法又不沉闷。所以有区别。

作为函数的参数也会有所不同,因为struct Foo{ int const x=7; Foo(){}; }; 只提供默认值。