1

basic_string 类具有声明为静态常量的 npos。为什么它自 C++11 起就声明为 static const,为什么不简单如下:

class basic_string{ 
  ................................

 enum: size_type { npos = static_cast<size_type>(-1) };
.........................>
};

???

哪个好, static const 或 enum ?

4

2 回答 2

2

有一个很好的理由不这样做,枚举创建了一个新类型,它至少会在解决重载或实例化模板时引起更改。

也就是说,我相信您实际上可以在类定义中声明和定义类静态常量,或者当类是模板时该规则是否有一些例外?

于 2013-07-09T12:41:23.927 回答
0

这两种解决方案几乎相同。所谓的 enum hack 之所以诞生,主要是因为编译器不支持类初始化。区别是:不能取枚举“变量”的地址;static const 方法是类型安全的。现在,在 C++11 中,枚举类确实是类型安全的(除非你坚持使用枚举)。

那么,基本上,唯一的区别在于“地址”问题。但是,当你定义一个枚举类时,你就是在定义一个类型;当您需要的是一个常量时,您可能会发现定义一个类型并不好。

于 2013-07-09T12:44:57.837 回答