正确的方式是用 C++ 的类型转换符,如 static_cast<>() // odd code, but it's validif(static_cast<double>(c)<14.5){autofactors=primeFactors(static_cast<std::size_t>(c));...} 1.3 前置声明 enum class支持前置声明,即不用初始化枚举成员,声明一个枚举类型 enumclassColor; 1) 新增枚举成员 en...
使用 enum class 的语法来声明: enumclassresult { success, flase, unknow, }; 此种枚举为类型安全的。枚举类型不能隐式地转换为整数;也无法与整数数值做比较。 只能进行强转后进行比较 static_cast<int>(result1);
问题: 尽管enum class增强了类型安全,但直接的整数赋值或比较仍可能编译通过。 代码语言:cpp 复制 Color color = static_cast<Color>(2); // 非枚举值赋给枚举变量 if (color == 2) { // 应避免这样的比较 } 解决方案: 避免非枚举值的直接赋值或比较,使用显式转换并在比较时使用枚举成员。 3. 枚举范...
做你自己的强制转换函数可以帮助你,你可以使用c++20的概念和约束来 Packageconst_cast函数,它指定了模板...
enum class UserInfoFields { uiName, uiEmail, uiReputation }; UserInfo uInfo; // as before … auto val = std::get<static_cast<std::size_t>(UserInfoFields::uiEmail)>(uInfo); 1. 2. 3. 4. 5. 此时,可用模板函数,将枚举成员 UserInfoFields::uiEmail 和 std::size_t 类型联系起来 templat...
{ auto factors = primeFactors(static_cast<std::size_t>(c)); // suspect, but it compiles ... ... } 1.3 前置声明enum class 支持前置声明,即不用初始化枚举成员,声明一个枚举类型1 enum class Color; 1) 新增枚举成员enum 在声明时,编译器会选择占用内存最小的一种潜在类型 (underlying types)...
做你自己的强制转换函数可以帮助你,你可以使用c++20的概念和约束来 Packageconst_cast函数,它指定了模板...
static_cast: 进行基础类型的转换 underlying_type: 模板类,用于获取枚举类型的基础类型 具体代码如下: // 例如下列结构体// enum class MyEnum {// age = 0,// gender = 1// };MyEnuma=MyEnum::age;std::cout<<static_cast<typenamestd::underlying_type<MyEnum>::type>(a); ...
enumColor{red,blue};enumclassAnimal{dog,cat};intmain(){Color myColor=red;Animal myAnimal=Animal::dog;int number=myColor;// 可以隐式转换number=myAnimal;// 错误,不允许隐式转换number=static_cast<int>(myAnimal);// 正确,显示转换} 三:指定底层所使用的数据类型 ...
Hint: For input, you can convert an int into an enum with static_cast. 1 2 3 4 DayOfWeek day;intdayNumber; cin >> dayNumber; day =static_cast<DayOfWeek>(dayNumber); and the output I am supposed to get should look like this: ...