Ich kann eine genauere, aber legalistische Antwort geben. Da Sie nicht mit einem Sprachanwalt getaggt haben, gehe ich vorerst davon aus, dass Sie nicht so viele Details wollen.
Arne Vogel
@ArneVogel Sie haben jetzt Ihre Chance :)
Igor Skochinsky
Antworten:
107
Das constQualifikationsmerkmal gilt für den Typ unmittelbar links, es sei denn, links befindet sich nichts. Dann gilt es für den Typ unmittelbar rechts. Also ja, es ist das gleiche.
Wenn nichts mehr übrig ist, dann ist es richtig (und umgekehrt) :-)
Seshadri R
8
So funktioniert das nicht wirklich. Spezifizierer und Qualifizierer (die dem Deklarator vorangehen ) können in beliebiger Reihenfolge angezeigt werden, z long volatile unsigned const typedef long cvull;. Der Typ ist weder (vollständig) links noch rechts von const.
Arne Vogel
1
@ArneVogel OMG, warum typedefist in der Mitte erlaubt :)
4LegsDrivenCat
Wie @ArneVogel kommentierte, ist die Antwort nicht vollständig korrekt. Die Tatsache, dass dies die akzeptierte Antwort ist, ist irreführend (und möglicherweise gefährlich).
wny
23
Erfundenes Beispiel:
std::vector<char*> test;
constauto a = test[0];
*a = 'c';
a = 0; // does not compileautoconst b = test[1];
*b = 'c';
b = 0; // does not compile
Beide aund bhaben Typ char* const. Denken Sie nicht, dass Sie den Typ einfach anstelle des Schlüsselworts "einfügen" können auto(hier :) const char* a! Das constSchlüsselwort gilt für den gesamten autoübereinstimmenden Typ (hier :) char*.
Antworten:
Das
const
Qualifikationsmerkmal gilt für den Typ unmittelbar links, es sei denn, links befindet sich nichts. Dann gilt es für den Typ unmittelbar rechts. Also ja, es ist das gleiche.quelle
long volatile unsigned const typedef long cvull;
. Der Typ ist weder (vollständig) links noch rechts vonconst
.typedef
ist in der Mitte erlaubt :)Erfundenes Beispiel:
std::vector<char*> test; const auto a = test[0]; *a = 'c'; a = 0; // does not compile auto const b = test[1]; *b = 'c'; b = 0; // does not compile
Beide
a
undb
haben Typchar* const
. Denken Sie nicht, dass Sie den Typ einfach anstelle des Schlüsselworts "einfügen" könnenauto
(hier :)const char* a
! Dasconst
Schlüsselwort gilt für den gesamtenauto
übereinstimmenden Typ (hier :)char*
.quelle
char*
, sie gilt für daschar
Teil, nicht für das*
Teil.