const confusion
-
#include <iostream> #include <string> #include <windows.h> std::string GetProgramDirectory() { char szFileName[MAX_PATH]; GetModuleFileName(NULL, szFileName, sizeof(szFileName)); return std::string(szFileName); } int main() { const std::string ProgramDir = GetProgramDirectory(); // Momentmal, was? std::cout << ProgramDir; return 0; }(Codeschönheiten / unschönheiten beiseite)
Dieser Code kompilierte fehlerfrei (und vermutlich warnungsfrei) mit dem GCC.
Das hätte ich nicht erwartet, da ich sogar noch eine WinAPI Funktion aufrufe (wegen dem const).Wie verhält sich dieses Stück Code eigentlich?
PS: Ernsthaft, eine Frage um 'const'? Und ich dachte ich wüsste alles was ich darüber wissen müsste -.-EDIT: Ist grad beim Tippen so enstanden und als ich noch rübergeguckt habe dachte ich: Momentmal, was?
-
Du scheinst const völlig falsch verstanden zu haben. const hindert dich nur daran, die Variable danach noch zu verändern. Eine const-qualifizierte Variable ist aber nicht zwangsläufig auch ein konstanter Ausdruck (constant expression), und muss deshalb auch nicht zur Compilezeit bekannt sein.
-
ups, die Lücke hat die lange lange lange Zeit nicht gestört.
-
Was ich interessant finde, ist was du dann bei sowas gedacht hast:
void foo(const char* s); void foo(const std::string& s);Dachtest du, dass man das nur mit Compile-Time Konstanten aufrufen kann?
Oder hat du einfach nur nie richtig über die Bedeutung von const nachgedacht?
-
Das was da für mich nur im Hinterkopf präsent war: Ich verändere sie innerhalb der Funktion nicht (/ darf nicht / muss nicht).
EDIT: Nachgedacht habe ich darüber hinaus nicht darüber, wobei ich es jetzt tue.