Jestem nieco mylić o następującym kodu C++:Inicjacja statycznych const zmiennej
#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;
}
Ponieważ zmienna c
została zadeklarowana jako static
i const
, nie powinno to być inicjowane tylko raz i zachować jego wartość początkową aż proces się zakończy? Zgodnie z tym rozumowaniem, spodziewałem się następujący wynik:
Hello
Hello
Ale mam:
Hello
Nooo
Czy możesz wyjaśnić, dlaczego wartość zmiennej c
została zmodyfikowana między dwoma wywołań funkcji, mimo to to jest zmienna const
?
W rzeczywistości nie jest niezdefiniowany. ** Dereferencing ** jest niezdefiniowany. Ponieważ ma zawsze poprawny adres po dereferencji, jest to poprawny program. – StoryTeller
@StoryTeller, 'cout << c << endl;' robi dereferencję wskaźnika. –
@StoryTeller Operator wyjściowy używa dereferencji. –