const Unterschiede
-
Immer wieder lese ich verschiedene Varianten mit dem Schlüsselwort const. Wo ist der Unterschied zwischen der ersten und zweiten Version?
Version 1
void test(std::string const testString) { std::cout << testString; }Vesion 2
void test(const std::string testString) { std::cout << testString; }Haben die beiden Schreibweisen überhaupt einen Unterschied? In der Funktion kann ich testString zumindest bei beiden Versionen nicht modifizieren, das ist ja auch der Sinn von const.
-
Kein Unterschied.
Bei Zeigern zum Beispiel spielt es aber eine Rolle, ob das
constlinks oder rechts vom*steht.const int* // Zeiger auf konstantes int int const* // Zeiger auf konstantes int int* const // Konstanter Zeiger auf intÜbrigens: Beide Beispiele in deinem Post sind Unsinn. Wenn schon, würde man den String als
const std::string&(d.h. Referenz auf konstanten String) übergeben.
-
Ja, beide Versionen sind gleich.
Der Unterschied ist tatsächlich Geschmackssache, ob der cv-qualifier vor oder hinter dem eigentlichen Typ steht.
int const i = 0; const int i2 = 0;Genauso verhält es sich für Funktionsparameter.
Es ist aber vielleicht schlauer das
constder Übersichtlichkeit halber dahinter zu schreiben (das mit den Zeigern kann dann nämlich verständlicher werden).
Dabei gilt die Rechts nach Links Regel:int const* const; // Von Rechts nach Links: Konstanter Zeiger auf konstantes Objekt vom Typ intWie Nexus bereits beschrieben hat: Bei Zeigern ist es ein wenig anders:
N3337 [dcl.ptr]/1 schrieb:
In a declaration T D where D has the form
* attribute-specifier-seqopt cv-qualifier-seqoptD1
[...] The cv-qualifiers apply to the pointer and not to the object pointed to.Edit: Ein paar Kommas entfernt

-
Eine schöne Erklärung des const Wirrwarrs findet sich hier.
Mit C++11 kam noch das schöne constexpr.
-
Youka schrieb:
Eine schöne Erklärung des const Wirrwarrs findet sich hier.
Mit C++11 kam noch das schöne constexpr.Der erste Link besteht eigentlich nur aus const-Bashing, keines der gebrachten Argumente ist wirklich schlüssig.
const vs constexpr ist Äpfel vs Birnen.
-
Youka schrieb:
Eine schöne Erklärung des const Wirrwarrs findet sich hier.
Einige sachliche Fehler, "messy" in jedem dritten Satz. Warum jemand einen solchen Artikel schreiben wollte, erschliesst sich mir nicht. Ich habe mir nur den Anfang und den Schluss durchgelesen. Letzterer macht keinen Sinn, jedenfalls wird nicht klar, worauf der Autor eigentlich hinaus will. Nicht empfehlenswert imo.