<分区>
如果我们为 unsigned
类型的对象分配一个超出范围的值,结果是该值的余数对目标类型可以容纳的值的数量取模。这是自然的。但是,如果我们将超出范围的值分配给 signed
类型的对象,则结果为 undefined。为什么 C++ 标准没有定义这种行为的确切结果,例如 unsigned
情况???
<分区>
如果我们为 unsigned
类型的对象分配一个超出范围的值,结果是该值的余数对目标类型可以容纳的值的数量取模。这是自然的。但是,如果我们将超出范围的值分配给 signed
类型的对象,则结果为 undefined。为什么 C++ 标准没有定义这种行为的确切结果,例如 unsigned
情况???
最佳答案
因为某些处理器会在算术覆盖时生成硬件异常。为了定义行为,C++ 代码必须在几乎每条 alu 指令之间插入一个陷阱,从而减慢程序的速度。
关于c++ - 为什么将超出范围的值分配给有符号类型的对象的结果在 C++ 中未定义?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42760688/