在这种情况下,我们认为我们的平台具有sizeof(int) == 4
并使用二进制补码作为带符号的数字表示。
Godbolt Environment - GCC满足这些条件。
int get_min() {
static_assert(sizeof(int) == 4);
static_assert(std::numeric_limits<int>::min() == -2147483648);
return std::numeric_limits<int>::min();
}
将产生:
get_min():
mov eax, -2147483648
ret
但是,如果我们将与 literal 相同的值隐式视为int
。
实际上,以下snippet会进行编译:
#include <type_traits>
void foo() {
auto x = -2147483648;
static_assert(std::is_same_v<decltype(x), long>); // x is long!
}
为什么常量-2147483648
被认为是long
类型?