【发布时间】:2018-10-22 15:01:03
【问题描述】:
考虑以下有问题的代码:
#include <iostream>
void foo(int64_t y) {
std::cout << y << "\n";
}
int main() {
uint64_t x = 14400000000000000000ull;
foo(x);
}
通常打印-4046744073709551616。
如何让编译器帮助解决此类转换/溢出问题?我尝试了以下方法:
g++ -g overflow.cpp -fsanitize=undefined -Wall -Wextra -pedantic -Wconversion -Wconversion
clang++ -g overflow.cpp -fsanitize=undefined,integer,implicit-conversion -Wall -Wextra -pedantic
这些都没有给出任何编译或运行时警告。
(clang 7.0.0 版,gcc 8.2.1 版)
【问题讨论】:
标签: c++ gcc clang overflow implicit-conversion