标准允许这样做吗?
我认为不会。有人会。我需要聪明的人来证明他是错的。
是的,它确实。有符号整数的溢出是未定义的行为,因此任何事情都可能发生(包括抛出异常)。
作为旁注,我必须说这对于大多数实现来说不太可能发生(但绝对可能);正如 C++11 标准在第 5/4 段的注释中提到的那样:
如果在计算表达式期间,结果未在数学上定义或不在其类型的可表示值范围内,则行为未定义。[注意:大多数现有的 C++ 实现忽略整数溢出。除以零的处理,使用零除数形成余数,所有浮点异常因机器而异,通常可以通过库函数进行调整。——尾注]
然而,正如 hvd 在评论中提到的那样,一些实现允许为整数溢出提供自定义处理程序,并且这些处理程序可能会抛出。
经验法则是任何可以用 C 语言编写的东西都不能也不应该抛出异常......
因此,它不会。
正如安迪所说,这种行为是未定义的,所以任何事情都可能发生。理论上,电脑也可以给你冲杯咖啡,带你的狗去散步。但是,如果您参加工作面试,我建议您告诉他们不 :)