为什么定义此代码实现的输出?

Haw*_*ike 4 c++ overloading

考虑以下两个函数重载:

int foo(int a)
{
  return 20;
}

const char foo(double b)
{
  return -3;
}

int x = foo(6.0);
cout << x;
Run Code Online (Sandbox Code Playgroud)

为什么这个例子的结果取决于具体的编译器或平台?

编译按ISO/IEC 14882:1998进行.

Bau*_*gen 13

重载函数是一个红鲱鱼; char foo(double)将在所有平台上挑选过载.

关键区别在于类型char本身:标准允许它是有符号或无符号的.选择哪一个是实现定义的.

在具有无符号的系统上char,函数将返回正数CHAR_MAX - 2(作为结果char(-3)).