假设有

class Foo{

public:
       bool   error;
       ......
       bool isValid(){return error==false;}
};

在某处
Foo *aFoo=NULL;

我通常会做if (aFoo!=NULL && aFoo->isValid()).....
但是,如果我在isValid方法中测试了无效性,该怎么办:
bool isValid(){return this!=NULL && error==false)

只需调用if (aFoo->isValid())即可简化外部测试

我已经在一些编译器中对其进行了测试,并且可以正常工作,但是我想知道它是否是标准的,并且在移植到其他环境时可能会引起问题。

最佳答案

为什么不这样简单地命名空间作用域呢?

bool isValid(Foo* f) {return f && f->isValid();}

一个if-声明类似
if (aFoo->isValid())

表示指针指向有效对象。这将是一个巨大的困惑源,并且很容易出错。

最后,您的代码确实会调用未定义的行为-aFoo->isValid每个定义都等于(*aFoo).isValid:



它将取消引用空指针以获得空引用,这显然是未定义的:

关于c++ - 空类指针中的方法(C++),我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/25844637/

10-11 21:05