2016-09-22 8 views
6

私は2人と混同しています。私は、本質的に一定でありかつ一度設定されたC++参照を知っています。他のものを参照するように変更することはできません。"const int&jj"と "int&const jj"の違いは何ですか?

+3

あなたのコンパイラは、第二の変異体を受け入れていますか? – juanchopanza

+1

2番目の変種を受け入れるコンパイラを指定してください。 – Angew

+3

@HumamHelfawiそれはまったく重複していません。この質問は、 'const int&'と 'int const&'を扱います。どちらも有効な形式です。これは 'const int&'と構文エラー 'int&const'を扱います。 – Angew

答えて

9

const int&は、const intへの参照を意味します。 (同様に、int&は非const intを参照のこと。)

int& const文字通り参照自体はconst修飾することができないため、C++で無効である(非const intに)const参照を意味します。

$8.3.2/1 References [dcl.ref]

CV-修飾参照はCV-修飾子 は型定義名を使用することによって導入される場合を除き、病気形成されている([dcl.typedef]、 [temp.param])またはdecltype-specifier([dcl.type.simple])です。この場合、 のcv-qualifierは無視されます。

あなたが言ったように、参照は本質的に一定であり、一度設定されると、他のものを参照するように変更することはできません。 (初期化後に参照を再バインドすることはできません)。これは、参照が常に "const"であることを意味し、const修飾参照またはconst非修飾参照は実際には意味をなさない可能性があります。

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 
関連する問題