std::basic_string::npos在C++11中的声明

std::basic_string::npos declaration in C++11

本文关键字:C++11 声明 npos basic string std      更新时间:2023-10-16

basic_string类具有声明为静态常量的npo。为什么它从C++11开始就声明为静态常量,为什么不简单地说:

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

静态常量和枚举哪个好?

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

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

这两个解决方案几乎相同。所谓的枚举破解之所以诞生,主要是因为编译器不支持类内初始化。不同之处在于:不能采用枚举"变量"的地址;静态const方法是类型安全的。现在,在C++11中,枚举类确实是类型安全的(除了您坚持使用枚举)。

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