假设static_cast永远不会抛出异常是否安全?
对于Enum强制转换的int,即使它无效,也不会抛出异常.我可以依靠这种行为吗?以下代码有效.
enum animal {
CAT = 1,
DOG = 2
};
int y = 10;
animal x = static_cast<animal>(y);
Run Code Online (Sandbox Code Playgroud) 最近提出一个有趣的 C 语言律师问题:
此问答针对 C++ (*)的类似情况提出了相同的问题:这些是否有效?
enum EA { a } ea = EA(2); // #1
enum EB { b } eb = static_cast<EB>(2); // #2
Run Code Online (Sandbox Code Playgroud)
我已经注意到,该变体在编译时被拒绝(“无法用‘ ’类型的右值初始化‘ ’类型的enum EC { c } ec = EC{2};值),而和被接受,排除格式错误但不排除格式错误的 NDR 和 UB对于和。Eint#1#2#1#2
(*) 在被提示对最初的 C 语言律师问题给出过于热切和错误的以 C++ 为中心的答案后,在此发布为自我回答的问答。