Oba wywołania get_string i get_string2 zwracają obiekty wykraczające poza zakres, gdy funkcja zwraca. Czy zwracany obiekt nie powinien być adresem w pamięci, który wykracza poza zakres funkcji po powrocie funkcji? To jest za pomocą Visual Studio 2008. Czy to zawsze działa? Czemu?Wskaźnik C++ do obiektów wykraczających poza zakres funkcji, gdy funkcja zwraca - dlaczego to działa?
#include <iostream>
enum myID { SMALL, MEDIUM, LARGE };
const char* get_string(myID id) {
switch(id){
case SMALL: return "small";
case MEDIUM: return "medium";
case LARGE: return "large";
default: return "unknown";
}
}
const char* get_string2(myID id) {
char* s = 0;
switch(id){
case SMALL: s = "small"; return s;
case MEDIUM: s = "medium"; return s;
case LARGE: s = "large"; return s;
default: return "unknown";
}
}
int main() {
std::cout << get_string(SMALL) << std::endl;
std::cout << get_string2(SMALL) << std::endl;
return 0;
}
możliwy duplikat [zwracania wskaźnika do literału (lub stałej) tablicy znaków (ciąg)?] (Http://stackoverflow.com/questions/4836534/returning-a-pointer-to-a-literal-or -constant-character-array-string) –