c++ - 在 C++ 中对 int 的字面赋值会引发异常吗?

标签 c++ exception try-catch

给定如下代码:

void f()
{
   int i;
   i = 0;
}

系统是否可能因为简单的赋值而抛出异常?

[编辑:对于那些说“没有异常不会发生”的人,您能否指出 C++ 标准中说明这一点的部分的方向?我找不到它。]

最佳答案

虽然您可能很难在标准中找到对它的保证,但一个简单的经验法则就是任何在 C 中合法的东西可能都不能抛出。 [编辑:据我所知,最接近直接声明此效果的是 §15/2,其中说:

Code that executes a throw-expression is said to “throw an exception;” [...]

反过来看,不执行 throw 表达式的代码不会抛出异常。]

throw 基本上仅限于两种可能性:第一种是调用 UB。第二个是做一些 C++ 独有的事情,例如分配给重载 operator = 的用户定义类型,或使用 new 表达式。

编辑:就作业而言,它可以通过多种方式进行抛出。显然,加上赋值运算符本身就可以做到,但还有相当多的其他运算符。例如,如果源类型与目标类型不匹配,您可能会通过源中的强制转换运算符或目标中的构造函数进行转换——两者都可能抛出异常。

关于c++ - 在 C++ 中对 int 的字面赋值会引发异常吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10622326/

相关文章:

PHP try catch : get variable defined in try

c++ - 使用 ifstream 从文本文件中读取

c++ - 我遇到了错误,您不应该得到它。

c# - EWS 流订阅 System.Xml.XmlException

python - 异常如何知道它是否正在被处理?

java - 使用 catch 分配一个新的整数值

c++ - 如何在发生异常时运行代码

c++ - 为什么 cmath 不使用模板和/或重载

c++ - 如何使用D-Bus获取设备名称?

c++ - 在 Linux 上的 C++ 无限循环中捕获内存不足的错误 bad_alloc()