Cả hai lệnh gọi hàm get_string và get_string2 trả về trong phạm vi khi hàm trả về. Không nên đối tượng trả về là một địa chỉ trong bộ nhớ mà đi ra khỏi phạm vi sau khi hàm trả về? Điều này đang sử dụng Visual Studio 2008. Điều này có nên luôn hoạt động không? Tại sao?Con trỏ C++ đến các đối tượng nằm ngoài phạm vi khi hàm trả về - tại sao nó hoạt động?
#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;
}
có thể trùng lặp của [trả về một con trỏ tới một mảng ký tự (hoặc không đổi) (string)?] (Http://stackoverflow.com/questions/4836534/returning-a-pointer-to-a-literal-hoặc -constant-character-array-string) –