ste*_*ett 5 c++ overloading overload-resolution
我有以下代码片段:
void eval(void*) { std::cout << "hello world\n"; }
void eval(...) { }
int main(int argc, char *argv[])
{
std::cout << "0: "; eval(0);
std::cout << "1: "; eval(1);
return 0;
}
Run Code Online (Sandbox Code Playgroud)
这给出了输出:
0: hello world
1:
Run Code Online (Sandbox Code Playgroud)
我的问题是:为什么重载解析选择的void*版本eval而不是...for的版本0,而不是 for 1?似乎在这两种情况下,它都可以推断出参数是一个 int 并采用可变参数版本。
由于向后兼容,0可转换为指针。它被用作 NULL 指针。现在nullptr在用,但0还是需要可转换,否则旧代码编译不出来。
如果您在编译器中启用最高警告级别进行编译,则编译器很可能会在0用作指针时警告您。