在 C++ 中将 int 值分配给 enum,反之亦然

Dan*_*Dan 4 c++

#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.

for*_*818 5

隐式转换或一般转换不是相互的。仅仅因为类型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 中“修复”,范围枚举不会以任何一种方式隐式转换。