下面的代码:classA{public:voidfunc(){}voidfunc1(){a=0;}private:inta;};intmain(){A*a=0;a->func();a->func1();}我使用vs2008和g++4.8.2编译,调用func()不会有问题,调用func1()会出错但有人说调用func()也会出错(不知道是他确时出错,还是测试代码写的不一样导致出错)所以我想知道空指针调用成员函数是未定义行为,由编译器决定如何做,还是C++标准有相关规定
2 回答
MM们
TA贡献1886条经验 获得超2个赞
成员函数的this可以为空指针,只要不在成员函数里面显式/隐式的使用this就行。这是因为C++里面this其实就是函数的最后一个参数,并没什么特别的,所以没什么undefinedbehavior在这里面。这个特性其实没什么特别的用处,我仅仅在某些指针的链式调用里会稍微用一下这个特性。比如:Foo*foo=...;foo->bar()->play();bar和play都是返回Foo*的函数,那么如果在里面写if(!this)returnnullptr;就可以方便的实现链式调用而不用检查返回值。
慕少森
TA贡献2019条经验 获得超9个赞
当然是Undefinedbehavior,在你以为它没出错的时候,它已经悄悄的联络三体人给了它们发射智子的坐标。言归正传,所谓UB,就是说没有人能对这一类行为的后果做出预测并负责,在特定的环境下也许它能正常工作,但对此没有任何保证。
添加回答
举报
0/150
提交
取消