乘法如何为C++枚举工作?

sha*_*oth 2 c++ templates

我们有一个模板转换函数,用于与numeric数据类型一起使用.它里面包含一个构造,它不能用像指针这样的类型进行编译.

template<class To, class From>
To ConvertTo( From what )
{
    assert( 2 * what == what * 2 ); // this will not compile for pointers
    //skipped
}
Run Code Online (Sandbox Code Playgroud)

当枚举作为第二个模板参数传递时,此函数可以编译并正常工作:

enum TSomeEnum {
   SE_First,
   SE_Second       
};

TSomeEnum enumValue = SE_First;
int result = ConvertTo<int>( enumValue );
Run Code Online (Sandbox Code Playgroud)

上面的代码在VC++ 7上按预期编译和运行.

操作*如何用于枚举?这是未定义行为的一种方式吗?

Tim*_*sch 5

枚举降级为整数(旧的C功能),这就是为什么这是有效的.我不认为它是未定义的行为,尽管它可能是你不想要/期望的那种行为.

  • 枚举降级为一些能够存储枚举的所有值的底层整数类型.对于C++,降级为'int'是不正确的. (6认同)