主要和函数之间的C++隐式转换

Mav*_*nav -2 c++ type-conversion implicit-conversion

我有以下简单的程序:

#include <iostream>
#include <stdio.h>

void SomeFunction(int a)
{
  std::cout<<"Value in function: a = "<<a<<std::endl;
}

int main(){

  size_t a(0);

  std::cout<<"Value in main: "<<a-1<<std::endl;
  SomeFunction(a-1);

  return 0;

}
Run Code Online (Sandbox Code Playgroud)

执行此操作后,我得到:

主要价值:18446744073709551615

函数值:a = -1

我想我大致理解为什么函数获得-1的'正确'值:存在从无符号类型到有符号类型的隐式转换,即18446744073709551615(无符号)= -1(有符号).

是否存在函数无法获得"正确"值的情况?

das*_*ght 7

由于size_ttype是无符号的,因此1可以很好地定义减法:

涉及unsigned操作数的计算永远不会溢出,因为无法用结果无符号整数类型表示的结果以比模式结果类型可以表示的最大值大1的数量减少.

但是,结果值2 64 -1超出了ints范围,因此您获得了实现定义的行为:

[when]新类型已签名且值无法在其中表示,结果是实现定义或引发实现定义的信号.

因此,你的问题的答案是"是":有些平台的价值a会有所不同; 还有一些平台,而不是调用SomeFunction程序将提出信号.