假设有
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/