error: invalid conversion from ‘char**’ to ‘const char**’
-
Hallo,
Warum? Ich dachte Typ X zu Typ const X geht immer!?
void f(const char** ) {} int main(int , char** argv){ f(argv); }
Fail.
-
Ich dachte Typ X zu Typ const X geht immer!?
Und ist das const X?
-
Kontraintuitiver Klassiker: Warum schlägt die Konvertierung fehl, wo der Zieltyp doch qualifizierter ist? Tatsächlich muss man ein wenig weiterdenken: wäre diese Konvertierung erlaubt, wären wir in der Lage, einen Zeiger vom Typ
X*
auf ein Objekt vom Typconst X
zeigen zu lassen, d.h. wir könnten ohne explizite Casts ein Szenario erreichen, in dem wir Qualifikation verlieren:const int constant; int** p = ...; int const** q = p; // hypothetisch *q = &constant; **p = 6; // undefiniert, aber wohlgeformt
Daher auch die entsprechende Regel in [conv.qual].
-
const char konstante = 'k'; char *p; const char** pp = &p; // Verboten. Aber mal angenommen es wäre erlaubt, so wie du es die vorstellst. *pp = &konstante; // Ganz legitime Operation. Aber indirekt zeigt p nun auf die Konstante! *p = 'x'; // Und jetzt haben wir über (den nicht-const Pointer) p die Konstante ändern können.
edit: Da war Arcoth schneller.
-
SeppJ schrieb:
edit: Da war Arcoth schneller.
Ein bedeutungsloses Kopf-an-Kopf-Rennen, so zwei Stunden nach Verfassung des Posts?
-
Arcoth schrieb:
SeppJ schrieb:
edit: Da war Arcoth schneller.
Ein bedeutungsloses Kopf-an-Kopf-Rennen, so zwei Stunden nach Verfassung des Posts?
Und dann halt beide innerhalb weniger Minuten