C&C++   发布时间:2022-04-03  发布网站:大佬教程  code.js-code.com
大佬教程收集整理的这篇文章主要介绍了c – 使用const char * literal作为std :: map键是否安全?大佬教程大佬觉得挺不错的,现在分享给大家,也给大家做个参考。
我有课,每个都返回它的名字
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,但我不确定它的多平台性.

解决方法

是.

但是,请注意,这不能保证找到您的对象(但可能会取决于实现):

data["Foo"]

这保证找不到你的对象:

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

使用基于std :: strcmp的自定义映射比较器将允许上述两种情况都起作用.

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

大佬总结

以上是大佬教程为你收集整理的c – 使用const char * literal作为std :: map键是否安全?全部内容,希望文章能够帮你解决c – 使用const char * literal作为std :: map键是否安全?所遇到的程序开发问题。

如果觉得大佬教程网站内容还不错,欢迎将大佬教程推荐给程序员好友。

本图文内容来源于网友网络收集整理提供,作为学习参考使用,版权属于原作者。
如您有任何意见或建议可联系处理。小编QQ:384754419,请注明来意。
标签: