basic_string类有npos,声明为static const。 为什么它从C ++ 11开始声明为静态const,为什么不简单如下:
class basic_string{
................................
enum: size_type { npos = static_cast<size_type>(-1) };
.........................>
};
???
哪个好,静态const或枚举?
答案 0 :(得分:2)
有一个很好的理由不这样做,枚举会创建一个新类型,在解决重载或实例化模板时至少会导致更改。
那就是说,我相信您实际上可以在类定义中声明和定义类静态常量,或者当该类是模板时该规则是否有一些例外?
答案 1 :(得分:0)
两种解决方案几乎相同。所谓的enum hack诞生是因为编译器主要不支持类初始化。区别在于:你不能取枚举“变量”的地址;静态const方法是类型安全的。现在,在C ++ 11中,枚举类确实是类型安全的(除了你坚持枚举)。
基本上,唯一的区别在于“地址”问题。但是,当您定义一个枚举类时,您正在定义一个类型;你可能会发现,当你需要的是一个常数时,定义一个类型是不好的。