箭头操作符(间接运算符)arrow operator
2015-06-09 17:37
302 查看
今天突然发现以前一直没有注意语法,
如果定义了类
class P {
int a;
}
class Ptr {
P *p;
P *operator->() {return p;}
}
那么可以这样写
Ptr ptr;
ptr->a = 1;
这里ptr->a = 1 其实是 (ptr.operator -> ())->a = 1; ,那为什么ptr 可以转换为 ptr.operator->() ?
答案是:编译器在解析这段代码的操作有如下步骤:
1.如果ptr是一个指针,并且指向的对象存在名为a的成员,则编译器调用对象的成员a
2.否则,如果ptr是一个重载了操作符-> 类的对象,那么首先执行 ptr.operator->() 再在返回值上执行->的操作。
3.报错。
如果定义了类
class P {
int a;
}
class Ptr {
P *p;
P *operator->() {return p;}
}
那么可以这样写
Ptr ptr;
ptr->a = 1;
这里ptr->a = 1 其实是 (ptr.operator -> ())->a = 1; ,那为什么ptr 可以转换为 ptr.operator->() ?
答案是:编译器在解析这段代码的操作有如下步骤:
1.如果ptr是一个指针,并且指向的对象存在名为a的成员,则编译器调用对象的成员a
2.否则,如果ptr是一个重载了操作符-> 类的对象,那么首先执行 ptr.operator->() 再在返回值上执行->的操作。
3.报错。
相关文章推荐
- C++中点操作符和箭头操作符的使用详解
- c++中箭头操作符(->)和点操作符(.)有什么不同
- C++重载箭头操作符的理解
- 操作符重载之解引用与箭头操作符
- C语言中的指针-记录个人理解
- ES6
- centos6.6搭建LANP环境(yum)
- linux下生成rsa密钥的方法
- mac 下docker得端口转发
- hadoop实例---多表关联
- Hadoop项目实战-用户行为分析之应用概述(一)
- linux 虚拟机下设置IP自动获取。
- linux安装tomcat
- 用cronolog为tomcat做日志分割
- 【转】linux trap
- Linux中kill,pkill,killall和xkill命令汇总讲解
- Linux mysql常用操作命令
- apache常用命令整理
- 利用接口测试框架实现web状态的监控
- Linux编程进阶