enum class:枚举值不会隐式转换为其底层类型,需要显式转换为底层类型,它们与整数类型之间没有隐式的比较操作。 3. 底层类型的指定: enum:底层类型可以是int、unsigned int、char等整数类型,默认情况下是int。 enum class:底层类型可以是任何整数类型,包括枚举类本身不具备的类型(例如long、unsigned long long等)。
enum class color { red, green, yellow,a,b,v }; int main() { int res(0); //res = color::red + color::green;//ERROR , “color”不定义该运算符或到预定义运算符可接收的类型的转换 res = static_cast<int>(color::red) + static_cast<int>(color::green); std::cout << res << ...
一、enum class 基础 定义与使用 enumclassColor{Red,Green,Blue};Color myColor=Color::Green; 1. 2. 与传统枚举相比,enum class的成员必须通过ClassName::MemberName的形式访问,这增加了名称空间的隔离性。 显式指定底层类型 enumclassErrorCode:unsignedshort{Success=0,FileError,MemoryError}; 1. 通过: 类型...
1) C++98 的enum是“非域化的”;而 C++11 的enum class是“域化的”,限制了枚举成员只在域内可见 2)enum class的缺省潜在类型 (underlying type) 是 int 型,而enum没有缺省潜在类型 3)enum class一般总是前置声明,而enum只有在指定了潜在类型时才可以是前置声明 参考资料 《Effective Modern C++》Item 10 ...
enumclassStatus:std::uint32_t;//Status的底层类型//是std::uint32_t//(需要包含 <cstdint>)不...
使用enum class定义枚举类型时,可以指定作用域和底层类型。作用域可以防止命名冲突,底层类型可以指定枚举类型的大小和范围。 枚举值可以使用作用域解析运算符(::)进行访问,也可以使用枚举类型作为前缀。enum class也支持隐式转换,但是只有当枚举值的类型相同时才能进行隐式转换,否则需要进行显式转换。 enum class也支持...
// Person 类classPerson{varname:String="jack"letlife:Int=1}vars1=Person()vars2=s1 s2.name="mike"s1 // People 结构体数据结构structPeople{varname:String="jack"letlife:Int=1}varp1=People()varp2=p1 p2.name="mike"p1 细心的同学可能已经发现了其中的诡异。变量s1、s2是Person类的实例,修改了...
最终在 C++23 中,我们可以享受标准化的这一功能。在 C++23 之前,将枚举转换为其底层类型需要显式转换:有了std::to_underlying,这种转换变得更加直接和富有表现力:该std::to_underlying函数提高了代码的可读性,减少了与类型转换相关的样板代码。它还阐明了意图,明确表明其目的是获取 的底层值enum。
enum class new_enum:unsigned int{ value1, value2, value3 = 100, value4 = 100}; 输出时,需要进行一次强制类型转换,或者重载operator<<操作符: #include<iostream> template std::ostream& operator<<(typename std::enable_if::value, std::ostream>::type& stream, const T& e) ...