我正在重构一些在很多地方使用NULL
的旧代码。问题是
通过
NULL
盲目替换所有nullptr
个实例是否安全?
我特别感兴趣的是,nullptr
替换NULL可能会导致一些运行时错误(编译时错误可以),但我想不出任何错误。如果没有,通过nullptr自动替换NULL是否安全(如果有的话,修复编译时错误)。
如果之前已经提出问题,我道歉 - 我找不到,如果你指出我的答案,我会删除它!
答案 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
替换完全没问题。)