在C ++中,NULL与False相同

时间:2010-01-13 01:07:58

标签: c++

在C ++(gcc,VS)中,NULL被认为与False相同。或者更重要的是,如果在逻辑语句中,NULL评估为什么。还有许多其他问题,但C ++没有具体问题。

由于某种原因,使用NULL控件循环(;;)只是冻结程序,指示在;;之间放置了除NULL之外的东西。请注意,此代码是我们的教授认为包含NULL值的代码。

4 个答案:

答案 0 :(得分:27)

我认为NULL通常定义为0,当用作布尔表达式时,巧合地计算为false。

答案 1 :(得分:6)

在C ++中,NULL#defined为0(因此计算结果为false)。在C中,它是void*,它的计算结果为false,但其类型不是数字类型。在标准库中(至少在GCC上):

#ifndef __cplusplus
#define NULL ((void *)0)
#else   /* C++ */
#define NULL 0
#endif  /* C++ */

答案 2 :(得分:2)

您似乎正在考虑以下代码:

for (;;) { }

这将永远循环,因为条件术语是空的。您可能想要将其称为 null条件以表示没有条件存在,但是当您和其他阅读过您的问题的人都可以证明时,这是一个令人困惑的短语,因为它与此相同:

for ( ; NULL; ) { }

以上内容根本不会循环。它使用宏NULL,它等于整数常量零,布尔上下文中的零被视为false。这不是“空条件”,因为 是一个条件 - 一个总是错误的条件。

如果你是从你的教授那里得到这个,并且他正在用C ++教课,那么我怀疑你误解了他,因为这不是我希望教授弄错的东西,所以去请他填写你笔记中的洞。如果他不是C ++教授,那么他可能只是尝试使用C ++示例来说明其他主题。你可能希望给他一个关于它的说明,这样他就可以在未来的讲座中澄清并展示一些不同的例子。

答案 3 :(得分:0)

某些平台(Mac)上的gcc上的NULL要复杂得多。它试图从下一个cxx rev开始使用nullptr thingy。即便如此,它仍应在布尔上下文中评估为false