为何在对象指针中需用->而非.访问成员?
为什么C++中对象指针必须用
->访问成员而不能用.? 首先得明确核心区别:
a是JMP类型的实体对象,它本身直接包含number成员的数据,所以用.运算符就能直接访问成员,比如a.number完全合法。sum_obj是JMP类型的指针(JMP*),它存储的不是对象本身,而是这个JMP对象在内存中的地址。指针自己并没有number这个成员,你要访问的是它指向的那个对象的成员,必须先找到指针指向的实体对象才行。
.运算符只能直接作用于实体对象,要访问指针指向的对象的成员,你需要先对指针做解引用操作(用*),把指针转换成它指向的实体对象,再用.访问,也就是(*sum_obj).number。
而->是C++专门为指针访问成员设计的语法糖,它和(*指针).成员完全等价,只是写起来更简洁。所以sum_obj->number本质上就是先解引用指针,再访问成员的简化写法。
你写sum_obj.number时,编译器会误以为你要访问指针sum_obj自身的number成员,但指针类型JMP*根本没有这个成员,因此会报错提示你应该使用->。
内容的提问来源于stack exchange,提问作者user21165505
相关产品推荐
相关产品推荐

