我在许多最顶层的头文件中看到了以下宏:
#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(使用前将#替换为@)