21

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

盲目地替换所有NULL实例是否安全nullptr

我对用 NULL 替换nullptr可能会导致一些运行时错误(编译时错误是可以的)的场景特别感兴趣,但我想不出任何问题。如果不是,那么将 NULL 自动替换为 nullptr 是否安全(如果有,则修复编译时错误)。

如果早先提出问题,我深表歉意-我找不到,如果您指出答案,我将删除它!

4

1 回答 1

25

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

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

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当传递时 an 和指针之间存在歧义时NULL,指针版本几乎总是需要的——这意味着大多数实际程序首先不会有这样的歧义(或者会使用强制转换(int*)NULL来绕过它,在这种情况下替换nullptr为完全可以)。

于 2014-09-16T20:06:43.613 回答