![]() |
1
1
我相信 the accepted answer to the referenced question 回答关于ABI兼容性的大多数问题。我可以在这里重复一遍,但在那里我看不到什么价值。 针对C++ 11域范围枚举的特定问题,请举例说明:
是格式错误的,因为它需要收缩转换,因此需要实现提供诊断,但如果实现仅使其发出警告,则它可能会编译。正如您所要求的,编译器不会悄悄地改变底层类型的大小。 我们可以从C++标准草案中看出这一点。 dcl.enump5 :
和 转换常量表达式 禁止变窄,从 expr.constp5 :
|
![]() |
2
0
这里是OP。 我发现了,我认为这是相关的,提到C++ 11有这么好。 std::underlying_type . 我想它可以和 is_same 和 static assertions ,以防止ABI因枚举而发生意外更改。 我认为(但我没有尝试)如果使用某个库,并且预先存在的枚举没有指定底层类型,那么这就特别相关。 |