NULL的含义是什么!=C++中的值

What is the meaning of NULL != value in C++?

本文关键字:C++ 是什么 NULL      更新时间:2023-10-16

可能重复:
这些(b条件==NULL(和(NULL==b条件(之间有什么区别?

我正在浏览一段C++代码,发现了一个类似的代码

if (NULL != threadInfo)
{
  ...
  ...
}

我只是想知道使用这个表达方式有什么区别吗

if (threadInfo != NULL)
{
  ...
  ...
}

如上文所述。读取时,第一个读取"如果NULL不等于ThreadInfo",第二个读取"If ThreadInfo不等于NULL"。对我来说,第二个更有意义。

没有,没有区别。在==的情况下,可能存在一些差异。问题是,如果你不小心写了=而不是==,编译器会在第一种情况下出错。

if (threadInfo = NULL) //always false. The compiler will give you a warning at best
if (NULL = threadInfo) //Compiler error

我个人讨厌这种做法,认为最好用正常的人类语言编写可以阅读的代码,而不是Yoda语言。

这是为了安全,所以你不会意外地写

threadInfo = NULL

而不是

threadInfo == NULL

对于!=没有必要这样做,但它是一致的。

如果threadInfo是覆盖operator !=的类型,并且该类的所有者没有提供一个对称的自由函数来处理交换两个参数的情况,则可能存在差异(也可能需要解雇该程序员(。

否则,这是一个品味问题。可能写if(42 == answer)而不是if(answer == 42)的人会更喜欢它——这可以防止您错误地键入赋值运算符而不是等于检查。但由于现代编译器在你这样做时会警告你,所以这种方法是否能提供任何东西是有争议的。

没有区别。编写NULL != ...的要点是,如果您改为拼写错误并编写NULL = ...,代码将无法编译。如果您有... = NULL,它可能是一个有效的赋值,错误可能会被忽略(但大多数编译器会检测到并警告您(。曾经有人试图使用这种技术在Linux内核中插入后门。

还要注意的是,大多数人不会这样编码。

没有区别,只是第一个选项不能被误键入为:

if (threadInfo = NULL)
{
    ...
    ...
}

有些人不知道如何使用编译器开关来检查这一点(有些编译器没有(。

没有区别,这就是所谓的Yoda编码约定。

if (NULL != threadInfo)

相当于

if (threadInfo != NULL)

if (threadInfo)

这通常用作约定,本身没有明确的含义。

因为赋值发生在lvals上,而NULL是不可分配的,所以当您指的是threadInfo == NULLthreadInfo != NULL错误时,这可以防止出现可怕的threadInfo = NULL

有关更多详细信息,请参阅维基百科关于左侧比较的文章部分

两者都做相同的事情。这是一种风格惯例,用于避免键入错误,如:

if (value=NULL) // assignment instead of == operator 
{ 
}

这些在逻辑方面是完全等价的。

第二种更直观,当人们可能会看到第一种更安全,因为它不允许错误地写入(threadInfo = NULL),从而导致错误。

Null是内存中的一个引用,它不包含任何内容,但没有任何地址可以访问它。

通过这种方式,您可以在null后面进行比较,以检查某个对象是否有值。

我看不出有什么不同。然而,如果您忘记键入第二个=,那么编写NULL == someVar的练习将使您免于编写NULL = someVar