打开编译优化
以下是一个传统的未定义行为,但是modern C++里还有人这样写吗
bool foo(int n) {
return (n+1) > n;
}
不要用这种方法测试溢出,有符号数溢出是未定义行为,编译器可以认为此行为不可能发生,所以n+1
永远大于n
事实上,clang9和gcc9.2都是这样做的
foo(int):
mov eax, 1
ret
正确的方式很简单,直接把n
和std::number_limits<int>::max()
比较即可