我有以下代码片段:
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;
}
这给出了输出:
0: hello world
1:
我的问题是:为什么重载解析选择
void*
eval
的版本而不是 ...
0
的版本,但不适用于 1
?似乎在这两种情况下,它都可以推断出参数是一个 int 并采用可变参数版本。
最佳答案
由于向后兼容,0
可转换为指针。它被用作 NULL 指针。现在 nullptr
已使用,但 0
仍然需要可转换,否则旧代码将不再编译。
如果您在编译器中启用最高警告级别进行编译,则编译器很可能会在 0
时警告您。用作指针。
关于c++ - 为什么重载决议选择指针类型为 0 而不是 1,在任何一种情况下它都可以选择省略号?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/60531298/