考虑下面的代码。
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
和一个-
运算符的表达式。