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

时间:2018-06-07 13:31:05

标签: c++ overloading

考虑以下两个函数重载:

int foo(int a)
{
  return 20;
}

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

int x = foo(6.0);
cout << x;

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

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

1 个答案:

答案 0 :(得分:13)

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

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

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