小编use*_*503的帖子

为什么这个函数调用不明确?

我正在阅读标准并试图弄清楚为什么没有演员表就无法解决此代码.

void foo(char c) { }

// Way bigger than char
void foo(unsigned long int) { }

int main()
{
   foo(123456789); // ambiguous
   foo((unsigned long int) 123456789); // works
}
Run Code Online (Sandbox Code Playgroud)

这就是它所说的:

4.13整数转换排名[conv.rank]

每个整数类型都有一个整数转换等级,定义如下:

- 任何无符号整数类型的等级应等于相应有符号整数类型的等级.

- char的等级应等于signed char和unsigned char的等级.

特别是,我的jimmies的沙沙声是它没有说任何无符号整数类型,只是unsigned char.我的猜测是,char通过转换被提升为无符号类型.这是真的?

c++ integer integer-promotion implicit-conversion unsigned-integer

32
推荐指数
1
解决办法
1959
查看次数