考虑以下代码。
void f(double p) {}
void f(double* p) {}
int main()
{ f(1-1); return 0; }
Run Code Online (Sandbox Code Playgroud)
MSVC 2017 不编译。它认为存在一个不明确的重载调用,因为1-1与 相同0,因此可以转换为double*. 其他技巧,如0x0、0L、 或static_cast<int>(0),也不起作用。即使声明 aconst int Zero = 0并调用也会f(Zero)产生相同的错误。如果Zero不是,它只能正常工作const。
看起来同样的问题适用于 GCC 5 及更低版本,但不适用于 GCC 6。我很好奇这是 C++ 标准的一部分、已知的 MSVC 错误还是编译器中的设置。粗略的谷歌没有产生结果。
这返回null:
DefaultFontFamily = Font.SystemFontOfSize(NamedSize.Default).FontFamily;
Run Code Online (Sandbox Code Playgroud)
还有这个:
DefaultFontFamily = new Label().FontFamily;
Run Code Online (Sandbox Code Playgroud)
正确的做法是什么?