给定如下代码:
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/