为了账号安全,请及时绑定邮箱和手机立即绑定

C++用空指针调用成员函数是未定义行为吗?

C++用空指针调用成员函数是未定义行为吗?

萧十郎 2019-03-30 09:31:39
下面的代码: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;就可以方便的实现链式调用而不用检查返回值。
                            
查看完整回答
反对 回复 2019-03-30
?
慕少森

TA贡献2019条经验 获得超9个赞

当然是Undefinedbehavior,在你以为它没出错的时候,它已经悄悄的联络三体人给了它们发射智子的坐标。
言归正传,所谓UB,就是说没有人能对这一类行为的后果做出预测并负责,在特定的环境下也许它能正常工作,但对此没有任何保证。
                            
查看完整回答
反对 回复 2019-03-30
  • 2 回答
  • 0 关注
  • 391 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信