2016-08-06 6 views
0

ich tue Übung 2.27 aus C++ Primer 5. Auflage, und ich bin in dieser Frage verwirrt:C++ Primer Übung 2.27 [. 5. Aufl]

Übung: Welche der folgenden Initialisierungen legal sind? Erkläre warum.

(c) const int i = -1, & r = 0;

Ich kam zu dem Schluss, dass illegal r ist, weil dieselbe sein wird, wie unten:

const int i = -1; 
int &r = 0; 

Aber this github repo legen nahe, dass (c) ist die gleiche wie unter:

const int i = -1; 
const int &r = 0; 

es also, widerspricht meiner Antwort, bitte geben Sie mir die richtige Antwort.

P.S .: Ich bin Begineer in C++ Sprache.

+0

schreiben können _ "Ich bin begineer in C++ Sprache." _ Dann Stack-Überlauf ist wahrscheinlich der falsche Ort für Sie. –

+0

Was lässt Sie glauben, dass die Antwort falsch ist? Diese Frage stellt sich einfach dadurch dar, dass Sie diese Antwort missachten, denn wenn Sie sie akzeptieren, bedeutet das, dass Sie sich geirrt haben. – hvd

+3

Sie können überprüfen, ob der Compiler mit Ihnen übereinstimmt, indem Sie 'std :: is_same' und' declltype' verwenden: http://coliru.stacked-crooked.com/a/c0bb0ba07726c1e6 – milleniumbug

Antwort

1

Die Typbezeichner (int) mit dem Qualifier (const) gehört alle Deklaratoren in der Erklärung

const int i = -1, &r = 0; 

So Deklaratoren i und &rconst int die Typbezeichner und Qualifier haben. Darüber hinaus können Sie nicht zum Beispiel schreiben

int &r = 0; 

, da ein temporäres Objekt (in diesem Fall Ausdruck 0) nicht zu einer nicht konstanten Referenz gebunden.

immer Sie

int &&r = 0; 
+0

gilt dies auch für 'volatile' Qualifier? – silverwolf

+0

@silverwolf Dies wird auf CV-Qualifier angewendet. –