gpt4 book ai didi

c++ - 使用 const char * literal 作为 std::map 键是否安全?

转载 作者:可可西里 更新时间:2023-11-01 18:36:39 27 4
gpt4 key购买 nike

我有类,每个类都返回它的名字

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,但我不确定它的多平台性。

最佳答案

Is it safe to use const char * literal as a std::map key?

是的。

但是,考虑到这不能保证找到您的对象(但可能,具体取决于实现):

data["Foo"]

并且保证找不到您的对象:

char[] str = "Foo";
data[str];

使用基于 std::strcmp 的自定义 map 比较器将允许上述两种情况都有效。

那么剩下的唯一陷阱就是将指向本地缓冲区的指针存储到映射中的可能性,这将超过本地缓冲区。如果您只存储字符串文字,当然不会发生这种情况,但这是您在使用 map 时必须记住的事情。 std::string 键不会有这样的警告。

关于c++ - 使用 const char * literal 作为 std::map 键是否安全?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43951388/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com