7
我有課,他們每個人返回其名稱使用const char * literal作爲std :: map key是否安全?
struct IFoo {
virtual const char * GetName() const = 0;
}
struct Foo : IFoo {
const char * GetName() const { return "Foo"; }
}
struct Bar: IFoo {
const char * GetName() const { return "Bar"; }
}
而且別的地方:
Foo* a = new Foo();
Foo* b = new Foo();
std::map<const char *, int> data;
data[a->GetName()] = 0;
printf("%i", data[b->GetName()]);
字符串文字應被存儲在內存中的一個地方,但它是100%?這段代碼適用於gcc,但我不確定它的多平臺。
是的,這是安全的,事實上提供是專門添加到C++標準,所以這個工作 –
這是安全的,只要你用'GetName()'的結果調用operator []'。如果您嘗試用另一個翻譯單元的硬編碼「」Foo「調用它,結果不能保證。在'gcc'上它會起作用,因爲它默認會合並常量池。 – dasblinkenlight
非常相關,幾乎是重複的:[字符串文字翻譯單元地址](http://stackoverflow.com/q/26279628/335858) – dasblinkenlight