【发布时间】:2025-12-24 21:35:06
【问题描述】:
假设 static_cast 永远不会抛出异常是否安全?
对于一个 int 到 Enum 的强制转换,即使它是无效的,也不会抛出异常。我可以依靠这种行为吗?以下代码有效。
enum animal {
CAT = 1,
DOG = 2
};
int y = 10;
animal x = static_cast<animal>(y);
【问题讨论】:
-
根据源和目标类型,static_cast 的结果可能是未定义的行为,其中可能包括抛出异常。
-
最好问一下,能不能在程序处于定义好的状态时抛出异常。当然 UB 理论上可以抛出异常,但是 UB 理论上也可以格式化你的硬盘。
-
@JerryCoffin:标准 5.2.9 只说某些结果可以是未定义的,虽然随后使用此类结果可能具有未定义的行为,但演员表本身没有明确提及未定义的行为。我错过了什么吗?