考虑下面的代码。
void f(double p) {}
void f(double* p) {}
int main()
{ f(1-1); return 0; }
MSVC 2017不会对此进行编译。它表明存在一个模棱两可的重载调用,因为1-1它与相同0,因此可以转换为double*。其他技巧,例如0x0,0L或static_cast<int>(0)也不起作用。甚至声明a const int Zero = 0和调用都会f(Zero)产生相同的错误。如果Zero不是,它只能正常工作const。
似乎同一问题适用于GCC 5及以下版本,但不适用于GCC6。我很好奇这是否是C ++标准的一部分,已知的MSVC错误或编译器中的设置。粗略的Google并未产生结果。
1-1一个整数文字?它是一个包含两个带值的整数文字1和一个-运算符的表达式。