带有int64_t参数和LL积分常量参数的重载函数

时间:2016-08-25 18:47:16

标签: c++11 overload-resolution

我已经在这里读过几次,为int64_t类型指定整数常量的正确方法是使用LL后缀。 当我将LL常量传递给具有int64_t和int32_t版本的重载函数时,我希望编译器选择该函数的int64_t变体。 为什么以下代码错误"调用' fun'暧昧"在clang ++ 3.8.0中。如果我明确地将常量转换为int64_t,它将编译。这是编译器错误还是语言功能? (它在vs2015中编译)

char fun(int32_t i)
{
  return (char)i;
}
char fun(int64_t i)
{
  return (char)i;
}
int main()
{
  fun(0x100LL);//<<<ERROR?.
  return 0;
}

编辑对于clang(64位linux版本)和VS2015(64位Windows版本),sizeof(long long)似乎是8个字节。所以clang应该选择int64_t重载,不是吗?

编辑2 我想我现在明白了。对于vs2015,int64_t对于clang和long很长很长。这就是编译差异的原因。

0 个答案:

没有答案