3 回答
TA贡献1798条经验 获得超7个赞
有一些论点(其中一个是相对较新的),我认为这与Bjarne的立场相矛盾。
意图文件
使用NULL
允许搜索它的使用,它还强调开发人员想要使用NULL
指针,无论编译器是否正在解释它NULL
。
指针和'int'的重载相对较少
每个人引用的例子是:
void foo(int*);void foo (int);void bar() { foo (NULL); // Calls 'foo(int)'}
但是,至少在我看来,上面的问题并不是我们对空指针常量使用NULL,而是我们有'foo'的重载,它们采用了不同类型的参数。参数也必须是一个int
,因为任何其他类型都会导致模糊调用,因此生成一个有用的编译器警告。
分析工具可以帮助今天!
即使在没有C ++ 0x的情况下,现在还有一些工具可以验证是否NULL
用于指针,并且0
用于整数类型。
C ++ 11将有一个新
std::nullptr_t
类型。
这是该表的最新参数。C ++ 0x 的问题0
和NULL
正在积极解决,你可以保证,对于提供的每个实现NULL
,他们将要做的第一件事是:
#define NULL nullptr
对于那些谁使用NULL
,而不是0
,这种变化将在很少或根本没有力气类型安全性的提高-如果有的话,还可以赶上他们已经使用了一些错误NULL
的0
。对于0
今天使用的任何人......呃......希望他们对正则表达有很好的了解......
TA贡献1796条经验 获得超4个赞
我很久以前就停止使用NULL(和大多数其他宏一样)。我这样做不仅是因为我想尽可能地避免使用宏,而且因为NULL似乎已经在C和C ++代码中被过度使用了。它似乎只在需要0值时使用,而不仅仅是指针。
在新项目中,我将其放在项目标题中:
static const int nullptr = 0;
现在,当符合C ++ 0x的编译器到达时,我所要做的就是删除该行。这样做的一个很好的好处是Visual Studio已经将nullptr识别为关键字并适当地突出显示它。
- 3 回答
- 0 关注
- 673 浏览
添加回答
举报