" const int&和"有什么区别? JJ"和" int& const jj"?

时间:2016-09-22 06:00:34

标签: c++ reference const language-lawyer

我对这两个感到困惑。我知道C ++引用本身就是常量,一旦设置它们就无法更改为引用别的东西。

3 个答案:

答案 0 :(得分:9)

const int&表示对const int的引用。 (同样,int&表示对非const int的引用。)

int& const字面意思是const引用(对于非const int),这在C ++中是无效的,因为引用本身不能是const限定的。

$8.3.2/1 References [dcl.ref]

  除了cv限定符之外,

Cv限定的引用是不正确的   是通过使用typedef-name([dcl.typedef],   [temp.param])或decltype-specifier([dcl.type.simple]),在这种情况下   cv限定符被忽略。

正如你所说,引用本质上是不变的,一旦设置它们就不能被改为引用别的东西。 (我们不能在初始化后重新引用引用。)这意味着引用始终是“const”,那么const限定引用或const不合格引用实际上可能没有意义。

答案 1 :(得分:3)

应用于引用的

const限定符意味着您无法更改引用的值。例如:

void foo(int& arg) {
   arg = 1; // OK. The value passed by a caller will be changed in-place.
}

void foo(const int& arg) {
   arg = 1; // Compilation error.
}

int& const jj是编译错误。

答案 2 :(得分:3)

差异:

const int& jj// means a reference to const int.

int& const jj // ill formed code that should trigger a compiler error