Ist 'auto const' und 'const auto' gleich?

76

Gibt es einen semantischen Unterschied zwischen auto constund const autooder bedeuten sie dasselbe?

steffen
quelle
11
Es ist das gleiche wie bei jedem anderen Typ.
chris
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.

AJG85
quelle
3
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;
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 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*.

AndiDog
quelle
Die Konstante gilt nicht wirklich für char*, sie gilt für das charTeil, nicht für das *Teil.
Jbruni