std::basic_string::npos在C++11中的声明
std::basic_string::npos declaration in C++11
basic_string类具有声明为静态常量的npo。为什么它从C++11开始就声明为静态常量,为什么不简单地说:
class basic_string{
................................
enum: size_type { npos = static_cast<size_type>(-1) };
.........................>
};
静态常量和枚举哪个好?
有充分的理由不这样做,枚举创建了一个新类型,该类型至少会在解决重载或实例化模板时引起更改。
也就是说,我相信您实际上可以在类定义中声明和定义类静态常量,或者当类是模板时,该规则是否存在异常?
这两个解决方案几乎相同。所谓的枚举破解之所以诞生,主要是因为编译器不支持类内初始化。不同之处在于:不能采用枚举"变量"的地址;静态const方法是类型安全的。现在,在C++11中,枚举类确实是类型安全的(除了您坚持使用枚举)。
那么,基本上,唯一的区别在于"地址"问题。但是,当您定义一个枚举类时,您就是在定义一个类型;当你需要的是一个常量时,你可能会发现定义一个类型是不好看的。
相关文章:
- 使用 (c++11) 声明类型时放置 __declspec(dllimport) 关键字的位置
- C++ 11 通过在类声明中使用指针来节省内存
- 有什么理由C++ 11+ std::mutex 应该声明为全局变量,而不是作为函数参数传递到 std::thread 中
- 如何实现声明功能-C 11,编译时间
- 如何使用 c++11 函数回调声明多个模板参数
- C++11: "decltype(1+2)"声明 xvalue 还是 prvalue?
- 不能和正确的方法来声明类成员 c++11 中的 int 数组数组
- 为什么即使在启用 C++11 并且我包含字符串之后,'stod'仍然没有在此范围内声明?
- 为什么 C++11 允许您将局部变量声明为 thread_local
- C++11 外部作用域变量声明为 auto
- 无法在 c++ 中声明动态整数数组,可能是 c++11 错误
- C++11 - 如何在C++11中做出此Qt声明
- 静态成员声明 c++11
- 使用新的 C++11 语法的 auto 进行函数声明,但使用 auto&并且没有 ->
- 标记C 声明的一种便携式方式,为C 11所接受的弃用
- 声明中的循环依赖性C 11
- 使用 C++11 auto 关键字声明两个(或多个)变量
- 可以在C 11中有条件声明的朋友类
- 有没有办法在声明中缩短C 11 lambda签名
- C++11:模板专用化的 constexpr 成员的标准参考需要额外声明