下面的代码:
class A {
public:
void func(){}
void func1(){a = 0;}
private:
int a;
};
int main()
{
A* a = 0;
a->func();
a->func1();
}
我使用vs2008和g++ 4.8.2编译,调用func()
不会有问题,调用func1()
会出错
但有人说调用func()
也会出错(不知道是他确时出错,还是测试代码写的不一样导致出错)
所以我想知道空指针调用成员函数是未定义行为,由编译器决定如何做,还是C++标准有相关规定
成员函数的
this
可以为空指针,只要不在成员函数里面显式/隐式的使用this
就行。这是因为 C++ 里面this
其实就是函数的最后一个参数,并没什么特别的,所以没什么 undefined behavior 在这里面。这个特性其实没什么特别的用处,我仅仅在某些指针的链式调用里会稍微用一下这个特性。
比如:
bar
和play
都是返回Foo *
的函数,那么如果在里面写if (!this) return nullptr;
就可以方便的实现链式调用而不用检查返回值。