这些对 get_string 和 get_string2 的调用都返回了在函数返回时超出范围的对象。返回的对象不应该是函数返回后超出范围的内存地址吗?这是使用 Visual Studio 2008。这应该总是有效吗?为什么?
#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;
}