繁体   English   中英

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

[英]std::basic_string::npos declaration in C++11

basic_string类具有npos,该npos声明为静态const。 为什么自C ++ 11起它就声明为静态const,为什么不这么简单:

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

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

???

静态const还是枚举哪个好?

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

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

两种解决方案几乎相同。 所谓的enum hack是由于大多数情况下不支持类初始化的编译器而诞生的。 不同之处在于:您不能使用枚举“变量”的地址; 静态const方法是类型安全的。 现在,在C ++ 11中,枚举类确实是类型安全的(除非您坚持使用枚举)。

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM