我正在重构一些使用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;
}
请注意,当在传递NULL
时,如果int
和指针之间存在歧义,则几乎总是希望使用指针版本 - 这意味着大多数真实程序一开始就不会有这样的模糊性(或者将使用诸如(int *)NULL
的转换来解决它,在这种情况下,用nullptr
替换完全没问题)。
char c = NULL;
这样的疯狂代码,但 C++11编译器在法律上可以将NULL
定义为nullptr
。 - T.C.