C++ 在if语句中使用它

C++ 在if语句中使用它,c++,this,C++,This,所以我知道,这个是对类本身的引用,但是我真的不知道它在if语句中做了什么 下面的代码做什么 if(this) { //Code goes here... } 我相当肯定它正在检查类是否为null,但是进一步的解释会更好 此指针是一个常量指针,用于保存当前对象的内存地址。所以,从技术上来说,这将检查它是否为null,而在成员函数中它不会为null。因为只有在拥有类的对象和抽象类时,才能调用该类,所以无论如何都不能使用它。因此,这个if没有多大意义。它试图检查

所以我知道,
这个
是对类本身的引用,但是我真的不知道它在if语句中做了什么

下面的代码做什么

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

我相当肯定它正在检查类是否为null,但是进一步的解释会更好

指针是一个常量指针,用于保存当前对象的内存地址。所以,从技术上来说,这将检查它是否为null,而在成员函数中它不会为null。因为只有在拥有类的对象和抽象类时,才能调用该类,所以无论如何都不能使用它。因此,这个if没有多大意义。

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

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

但是,这不是一种有效的技术,因为对空指针调用方法(即使是非虚拟方法!)是未定义的行为,因此测试将无法可靠地工作。

它确实在检查
是否存在此问题!=空PTR
。但是,当您到达此语句时,您已经从未定义的行为传递了。因为
仅在类方法中可用,使用
nullptr调用此类方法是不正确的

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


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

“这在成员函数中永远不会为空,因此您执行的检查是无用的。”这与我的意思是一样的。我放弃了我的否决票,但您的陈述仍然是错误的:“它在成员函数中不会为null。”
这个
可以为null。它怎么可以为null?除非你的对象在那里,否则它不能被使用。我缺少什么吗?“我知道这是对类本身的引用”--不。“这”是指针,不是引用。