2016-09-22 91 views
6

我对这两者感到困惑。我知道C++的引用本质上是不变的,一旦设置,它们就不能被改变来引用别的东西。“const int&jj”和“int&const jj”有什么区别?

+3

请问你的编译器接受第二个变种? – juanchopanza

+1

请指定哪个编译器接受第二个变体。 – Angew

+3

@HumamHelfawi这根本不是重复的。这个问题涉及'const int&'和'int const&',它们都是有效的(和等价的)形式。这个处理'const int&'和语法错误'int&const'。 – Angew

回答

9

const int&表示参考常量int。 (类似地,int&意味着参照非const int。)

int& const字面意思const引用(到非const int),这是在C++中无效,因为参考本身不能是常量限定。

$8.3.2/1 References [dcl.ref]是形成不良的,当cv修饰符 通过使用一个typedef名的介绍除了

CV-合格的引用([dcl.typedef], [temp.param])或decltype-specifier([dcl.type.simple]),在这种情况下,cv-qualifiers将被忽略。

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

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是一个编译错误。

3

差异:

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

int& const jj // ill formed code that should trigger a compiler error 
相关问题