1
197
下面是Stroustrup的看法: C++ Style and Technique FAQ
也就是说,不要为小事操心。 |
2
126
|
3
46
使用NULL。NULL表示您的意图。它是0这一实现细节应该无关紧要。 |
4
40
我总是使用:
|
5
34
很久以前,我就不再使用NULL,而是使用0(以及大多数其他宏)。我这样做不仅是因为我想尽量避免宏,而且因为空似乎已经过度使用C和C++代码。它似乎在需要0值时使用,而不仅仅是指针。 对于新项目,我将其放在项目标题中:
现在,当符合C++0x的编译器到达时,我所要做的就是删除这一行。 这样做的一个好处是VisualStudio已经将nullptr识别为关键字,并适当地突出显示它。 |
6
22
这个故事的寓意。在处理指针时,应该使用NULL。 1) 它声明了您的意图(不要让我搜索所有代码,试图找出变量是指针还是数字类型)。 2) 在某些期望变量参数的API调用中,它们将使用空指针指示参数列表的结尾。在这种情况下,使用“0”而不是NULL可能会导致问题。在64位平台上,va_arg调用需要一个64位指针,但只传递一个32位整数。在我看来,你依赖于其他32位为你调零?我见过某些编译器(例如英特尔的icpc)不那么优雅——这导致了运行时错误。 |
7
17
如果我回忆正确,NULL在我使用的标题中的定义是不同的。对于C,它被定义为(空隙*)0,而对于C++,它定义为0。代码看起来像:
就我个人而言,我仍然使用NULL值来表示NULL指针,这使得使用指针而不是某个整数类型更为明确。是,在内部,空值仍然是0,但它没有这样表示。 此外,我不依赖整数到布尔值的自动转换,而是显式地比较它们。
而不是:
只需说,在C++11中,这一切都得到了修正,人们可以简单地使用
|
8
16
我要说的是,历史已经证明了这一点,那些支持使用0(零)的人是错误的(包括比亚恩·斯特劳斯特鲁普)。支持0的论点主要是美学和“个人偏好”。 在创建了C++11之后,一些编译器开始抱怨(使用默认参数)将0传递给带有指针参数的函数,因为0不是指针。 如果代码是使用NULL编写的,那么可以通过代码库执行简单的搜索和替换,使其成为NULL ptr。如果您一直使用选择0作为指针编写的代码,那么更新它要繁琐得多。
|
9
11
我曾经在一台机器上工作,其中0是一个有效地址,NULL被定义为一个特殊的八进制值。在该机器上(0!=NULL),因此
不会像你期望的那样工作。你必须写作
虽然我相信现在大多数编译器都将NULL定义为0,但我仍然记得几年前的教训:NULL不一定是0。 |
10
10
我认为标准保证NULL==0,因此您可以选择其中之一。我更喜欢NULL,因为它记录了您的意图。 |
11
10
我通常使用0。我不喜欢宏,而且也不能保证您使用的某些第三方头不会将NULL重新定义为奇怪的东西。 您可以使用Scott Meyers和其他人提出的NulLPTR对象,直到C++获得NulLPTR关键字:
谷歌“nullptr”获取更多信息。 |
12
9
然而,这并不意味着它们都是好的编程实践。考虑到性能没有差异,选择低级别感知选项而不是不可知/抽象选项是一种糟糕的编程实践。 帮助代码读者理解您的思维过程 . NULL、0、0.0、'\0',0x00和whatelse都转换为相同的内容,但在程序中是不同的逻辑实体。它们应该这样使用。NULL是指针,0是数量,0x0是位有趣的值等。无论指针是否编译,都不会将“\0”分配给指针。 我知道一些社区鼓励通过打破环境合同来展示对环境的深入了解。然而,负责任的程序员会编写可维护的代码,并将这些实践排除在他们的代码之外。 |
13
5
奇怪的是,没有人提到这一点,包括斯特劳斯特鲁。虽然谈论了很多关于标准和美学的问题,但没有人注意到这一点
危险的
使用
|
14
4
尽可能避免使用C++引用来解决整个问题。而不是
你可能经常会写作
当然,这并不总是有效的;但是空指针可能被过度使用。 |
15
3
因为NULL不是语言的一部分,所以我更喜欢使用0。 |
16
3
主要是个人偏好,尽管有人可能会提出NULL的论点,这使得对象很明显是一个指针,它当前不指向任何东西,例如。
IIRC,标准不要求NULL为0,因此使用<标准差速>可能对编译器来说是最好的。
|
17
3
我更喜欢使用NULL,因为它清楚地表明您的意图是值表示指针,而不是算术值。事实上,这是一个宏是不幸的,但由于它是如此广泛的根深蒂固,没有什么危险(除非有人做了一些真正愚蠢的事情)。我真希望从一开始它就是一个关键词,但是你能做什么呢?
C++09将添加nullptr构造,我认为这是早就应该添加的。 |
18
1
我总是使用0。不是因为任何真正的思考原因,只是因为当我第一次学习C++时,我读了一些用0推荐的东西,我总是这样做。从理论上讲,可读性可能会有一个混乱的问题,但在实践中,我从未在数千工时和数百万行代码中遇到过这样的问题。正如斯特劳斯特鲁普所说,在标准成为nullptr之前,这实际上只是个人审美问题。 |
19
1
有人告诉过我一次。。。我将把NULL重新定义为69。从那以后我就不用它了:P 它使您的代码非常容易受到攻击。
标准中并非所有内容都是完美的。宏NULL是一个实现定义的C++空指针常数,它与C NULL宏不完全兼容,除了隐式隐藏之外,它还将它转换成一个无用且容易出错的工具。
告诉我下一个例子并不令人困惑:
正因为如此,新标准中出现了std::nullptr\t
|
20
1
我主张尽可能不使用0或空指针。 使用它们迟早会导致代码中出现分段错误。根据我的经验,C++中的指针是C++中错误的最大来源之一。 此外,它还会导致代码中出现“if not null”语句。如果您可以始终依赖有效状态,则会更好。 几乎总是有更好的选择。 |
21
-4
将指针设置为0并没有那么清楚。特别是如果你使用的是C++以外的语言。这包括C和Javascript。 我最近研究了一些代码,如:
第一次使用纯虚函数。我以为这是一个星期的魔术。当我意识到它基本上只是将函数指针设置为
|
saber · MySql查询没有结果 2 年前 |
pigfox · Mysql空表联接失败 6 年前 |
Jaa Zaib · 返回空值的大小写表达式 6 年前 |
Robert Vogelezang · 为什么null未写入输出窗口? 6 年前 |
l. schwarz · sql长度(null) 6 年前 |
ÇAÄrı Keskin · SQL-删除(消除)没有数据的列 6 年前 |
Dorkymon · 使用系统在输出处获取null。出来打印F 6 年前 |