#include <iostream>
typedef enum my_time {
day,
night
} my_time;
int main(){
// my_time t1 = 1; <-- will not compile
int t2 = night;
return 0;
}
Run Code Online (Sandbox Code Playgroud)
在 C++ 中,如何期望我可以enum为 an 赋值int,但不能以其他方式赋值?
当然,这一切都可以在C.
隐式转换或一般转换不是相互的。仅仅因为类型A可以转换为类型B并不意味着B可以转换为A.
旧枚举(无作用域枚举)可以转换为整数,但另一种方式是不可能的(隐式)。这就是它的定义方式。有关详细信息,请参阅此处:https ://en.cppreference.com/w/cpp/language/enum
粗略地说,enums 只是命名常量,对于函数来说
void foo(my_time x);
Run Code Online (Sandbox Code Playgroud)
传递任意int. 然而,一个
void bar(int x);
Run Code Online (Sandbox Code Playgroud)
可以使用枚举来表示 的特殊值,x但仍允许使用其他值:
enum bar_parameter { NONE, ONE, MORE, EVEN_MORE, SOME_OTHER_NAME };
bar(NONE);
bar(SOME_OTHER_NAME);
bar(42);
Run Code Online (Sandbox Code Playgroud)
这已在 C++11 中“修复”,范围枚举不会以任何一种方式隐式转换。