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


76

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


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.


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*.


Die Konstante gilt nicht wirklich für char*, sie gilt für das charTeil, nicht für das *Teil.
Jbruni
Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.