最小整数常数

时间:2019-04-22 13:04:09

标签: c++ architecture

在这种情况下,我们认为我们的平台具有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类型?

0 个答案:

没有答案