Ich bin etwas verwirrt über die folgenden C++ Code:Initialisierung einer statischen const variable
#include <iostream>
using namespace std;
void test(const string& str)
{
static const char * const c = str.c_str();
cout << c << endl;
}
int main(int argc, char* argv[])
{
test("Hello");
test("Nooo");
return 0;
}
Da die Variable c
als static
deklariert und const
, sollte dies nicht nur einmal initialisiert werden und halten seinen Anfangswert bis der Prozess abgeschlossen ist? Nach dieser Argumentation, erwartete ich die folgende Ausgabe:
Hello
Hello
Aber ich habe:
Hello
Nooo
Können Sie den Wert der Variablen c
klären, warum wenn es zwischen zwei Funktionsaufrufe sogar modifiziert wurde, ist eine const
Variable?
Eigentlich ist es nicht undefiniert. ** Dereferenzieren ** ist nicht definiert. Da es immer eine gültige Adresse hat, wenn dereferenziert wird, ist es ein gültiges Programm. – StoryTeller
@StoryTeller, 'cout << c << endl;' dereferenziert den Zeiger. –
@StoryTeller Der Ausgabeoperator verwendet Dereferenzierung. –