在 C++ 代码中用 nullptr 代替 NULL
14.14 ID_deprecatedNULL
标识符 NULL 由实现定义,在 C++ 语言中往往等同于常量 0,无法有效区分整数与指针,用 nullptr 可避免这种问题。
示例:
void foo(int) {
cout << "foo-1\n";
}
void foo(int*) {
cout << "foo-2\n";
}
int main() {
foo(NULL); // Non-compliant, what is output?
}
NULL 表示空指针,所以应该调用参数为指针的重载函数,但不同的编译器对这段代码有不同的处理,有的无法通过编译,有的编译执行后会输出 foo-1,用 nullptr 代替 NULL 可解决这种问题。
依据
ISO/IEC 14882:2003 C.2.2.3(1)-implementation
ISO/IEC 14882:2011 2.14.7(1)
ISO/IEC 14882:2011 C.3.2.4(1)-implementation
ISO/IEC 14882:2017 C.5.2.7(1)-implementation