#define NULL nullptr 安全吗?

2024-01-23

我在许多最顶层的头文件中看到了以下宏:

#define NULL 0  // C++03

在整个代码中,NULL and 0可以互换使用。如果我把它改成.

#define NULL nullptr  // C++11

会引起不良副作用吗?我可以想到唯一(好的)副作用,因为以下用法将变得格式不正确;

int i = NULL;

我在最顶层的头文件中看到了以下宏:

你不应该看到这一点,标准库在中定义了它<cstddef> (and <stddef.h>)。并且,IIRC,根据标准,重新定义标准头文件定义的名称会导致未定义的行为。因此,从纯粹的标准角度来看,您不应该这样做。


我见过人们做以下事情,无论他们心碎的原因是什么:

struct X{
  virtual void f() = NULL;
}

(如[错误]:“将虚拟表指针设置为NULL")

这仅在以下情况下有效NULL定义为0, 因为= 0是纯虚函数的有效标记(§9.2 [class.mem]).

也就是说,if NULL was 正确地用作空指针常量,那么就不会破坏任何内容。

然而,请注意,即使看起来使用正确,这也会改变:

void f(int){}
void f(char*){}

f(0); // calls f(int)
f(nullptr); // calls f(char*)

然而,如果真是这样的话,几乎可以肯定它已经被破坏了。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

#define NULL nullptr 安全吗? 的相关文章

随机推荐