当NULL不能被nullptr替换时?

时间:2014-09-16 19:58:21

标签: c++ c++11 null nullptr

我正在重构一些在很多地方使用NULL的旧代码。问题是

  

通过NULL盲目替换所有nullptr个实例是否安全?

我特别感兴趣的是,nullptr替换NULL可能会导致一些运行时错误(编译时错误可以),但我想不出任何错误。如果没有,通过nullptr自动替换NULL是否安全(如果有的话,修复编译时错误)。

如果之前已经提出问题,我道歉 - 我找不到,如果你指出我的答案,我会删除它!

1 个答案:

答案 0 :(得分:23)

在实践中它应该是相当安全的。

但是,从技术上讲, 可能会导致程序的含义发生变化,而不会导致任何编译器错误。考虑following program

void foo(int) { std::cout << "int\n"; }
void foo(int*) { std::cout << "int*\n"; }

int main() {
    foo(NULL);       // prints 'int'
    foo(nullptr);    // prints 'int*'
    return 0;
}

请注意,当int与传递NULL时的指针之间存在歧义时,指针版本几乎总是需要 - 这意味着大多数真正的程序首先不会有类似歧义(或者会使用像(int*)NULL这样的演员来绕过它,在这种情况下,nullptr替换完全没问题。)