This question already has answers here:
What happens if I assign a negative value to an unsigned variable?

(6个答案)


3年前关闭。




在以下代码中,我已将size_t用作函数参数并传递了负值。我已经使用以下命令在GCC(Linux)上编译了程序。
g++ -Wall size.cpp -o size

GCC编译成功,没有警告,但是结果不是我期望的:
size_t : 18446744073709551615
int : -1

码:
#include <iostream>

void func1(size_t i)
{
  std::cout << "size_t : " << i << std::endl;
}

void func2(int i)
{
  std::cout << "int : " << i << std::endl;
}

int main()
{
  func1(-1);
  func2(-1);
  return 0;
}

为什么编译器不使用size_t生成负值警告?

最佳答案

由于size_t在C++中始终是未签名的:





因为将size_t分配为负值会调用有符号到无符号的转换,这是定义明确的:

关于c++ - 为什么编译器不为size_t生成负值警告? ,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/46968502/

10-11 15:48