我正在重构一些NULL
在许多地方使用的旧代码。问题是
盲目地替换所有
NULL
实例是否安全nullptr
?
我对用 NULL 替换nullptr
可能会导致一些运行时错误(编译时错误是可以的)的场景特别感兴趣,但我想不出任何问题。如果不是,那么将 NULL 自动替换为 nullptr 是否安全(如果有,则修复编译时错误)。
如果早先提出问题,我深表歉意-我找不到,如果您指出答案,我将删除它!
在实践中它应该是相当安全的。
但是,从技术上讲,您的程序的含义可能会发生变化,而不会导致任何编译器错误。考虑以下程序:
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
为完全可以)。