Warum ist std::array
‚s Daten std hier andersconst Ausbreitung :: Array von Zeigern
using T = const int *;
std::array<T, 4> x = { &a, &b, &c, &d }; // name: class std::array<int const *,4>
x[0] = &c; // OK : non-constant pointer
*x[0] = c; // Error : constant data
instanziiert Typ ist?
using T = int *;
std::array<const T, 4> x = { &a, &b, &c, &d }; // name: class std::array<int * const,4>
x[0] = &c; // Error : constant pointer
*x[0] = c; // OK : non-constant data
Dieser zweite Fall entspricht const std::array<T, 4>
(konstante Zeiger auf nicht konstante Daten). Wenn wir const int *
direkt verwenden: std::array<const int*, 4>
erhalten wir das erste Fallverhalten.
Also genauer, warum ist using T = int*; std::array<const T, 4>;
entspricht std::array<int*const, 4>
und nicht std::array<const int*, 4>
?
Die kurze Antwort ist: weil so C++ funktioniert. Der Typ ist ein Zeiger auf etwas. Das Anwenden des Modifikators "const" macht es zu einem konstanten Zeiger auf etwas. Das Ende. –
Nur weil ich deine Hausadresse auf meiner Brust tätowieren will, heißt das nicht, dass du dich nicht bewegen darfst. – StoryTeller
Eins ist ein Const-Zeiger auf veränderbare Objekte und eins ist ein veränderbarer Zeiger auf Const-Objekte – Julius