HC4*_*ica 6 c++ linker abi c++11 enum-class
假设有一个使用枚举类的C++ 11 API:
// api.hpp
enum class E {A, B, C};
void f(E);
...
// api.cpp
void f(E e)
{
if (e == E::A)
...
}
Run Code Online (Sandbox Code Playgroud)
现在假设我想使用这个API,但我没有C++ 11编译器.所以我:
api.hpp枚举类并将其更改为常规枚举.api.hpp并正常使用API(例如调用f).api.hpp).这似乎与海湾合作委员会有关,但一般来说是安全的,还是我玩火(ODR违规等)?
假设两个编译器在其他方面是链接兼容的,那么只有enum vs. enum类才有问题.
就像ildjarn所说,这是未定义的行为.并且这实际上可能在实际实现上失败的原因是普通的C++ 03枚举没有固定的底层类型.虽然你的枚举类型总是以"int"作为其底层类型,但是相应的C++ 03枚举可以将"short"作为其底层类型,这使得代码不能与布局兼容.