在if语句中使用此

Using this in an if statement

本文关键字:if 语句      更新时间:2023-10-16

所以我知道this是对类本身的引用,但我不能真正说出它在if语句中的作用

以下代码的作用是什么?

    if(this)
    {
       //Code goes here...
    }

我确信它正在检查类是否为null,但如果能进一步解释就太好了!

this指针是一个常量指针,用于保存当前对象的内存地址。所以,从技术上讲,这将检查它是否为null,这在成员函数中不会为null。由于在拥有对象之前无法调用类,因此在抽象类中无论如何都不能使用它。所以,如果没有多大意义的话。

它试图检查该方法是否在NULL指针上调用,例如:

Foo * foo = NULL;
foo->TheMethod();

然而,这不是一种有效的技术,因为在NULL指针上调用方法(甚至是非虚拟方法!)是未定义的行为,因此测试无法可靠地工作。

它确实在检查this != nullptr。然而,当您到达该语句时,您已经从未定义的行为中转移了出来。因为this仅在类方法中可用,并且用nullptr调用这样的方法是UB。

因此,这种说法从来没有任何有效的目的。

除了UB,还要记住这样的检查只有在用指针调用时才有用。它们与对象/引用无关。如果方法是virtual,那么大多数体系结构都会在到达该if之前崩溃代码