在下面的代码中,我使用static_cast
将强类型enum
转换为int
。这同样适用于另一个方向。但是如果演员int
不在enum
的范围内,它也有效。为什么这样,为什么编译器没有抓住这个?
#include <iostream>
#include <string>
enum class Name {Hans, Peter, Georg}; // 0, 1, 2
std::string getName(Name name) {
switch(name) {
case Name::Hans: return "Hans";
case Name::Peter: return "Peter";
case Name::Georg: return "Georg";
default: return "not valid name";
}
}
int main()
{
// Cast a Name to an int, works fine.
std::cout<< static_cast<int>( Name::Peter ) <<std::endl; // 1
std::cout<< static_cast<int>( Name::Hans ) <<std::endl; // 0
// Cast an int to a Name
std::cout<< getName(static_cast<Name>(2)) <<std::endl; // Georg
std::cout<< getName(static_cast<Name>(3)) <<std::endl; // not a valid name
// I would expect a compiler error/warning like i get here:
// std::cout<< static_cast<int>( Name::Hans + 4 ) <<std::endl;
}
答案 0 :(得分:0)
首先,人们经常使用枚举来表示位标志:
enum class FontFlags { bright=0x1, bold=0x2, blink=0x4 };
现在他们希望这可行:
FontFlags(int(FontFlags::bold) | int(FontFlags::blink))
但当然价值是6,这是“不可能的”。