常见错误24:晦涩难懂的operator->
  内建的operator->是二元的,左操作数是一个指针,右操作数是一个class成员的名字,而
重载版本的operator->则是一元的。
  请注意,operator->的调用序列的触发(activation)总是包含operator->之定义的对象

静态决定的,而且该调用序列总是终结于返回指向class对象的内建指针的调用。

ptr.h
#ifndef PTR_H
#define PTR_Hclass T {public:void f();
};class Ptr {public:Ptr( T *init );T *operator ->();//...private:T *tp_;
};
//对重载版本的operator->的调用,必须返回一个可以用operator->访问其成员的对象。class AugPtr {public:AugPtr( T *init ): p_( init ) {}Ptr &operator ->();//...private:Ptr p_;
};#endifptr.cpp
#include <cstdlib>
#include <iostream>
#include "ptr.h"using namespace std;enum Days { SUNDAY, MONDAY, TUESDAY, WEDNESDAY, THURSDAY, FRIDAY, SATURDAY };
Days today() {return Days(rand()%7);
}Ptr::Ptr( T *init ): tp_( init ) {}T *Ptr::operator ->() {if( today() == TUESDAY ) {abort();return 0; // because compilers don't know semantics of abort}elsereturn tp_;
}Ptr &AugPtr::operator ->() {if( today() == FRIDAY )cout << '\a' << flush;return p_;
}int main() {Ptr p( new T );p->f(); // p.operator ->()->f()!//从某种视角来看,可以把实际发生的事理解成词法单位->没有被“吃掉”,而是保留下来//“派真正的用场”,如同内建的operator->一样。典型地,重载版本的operator->被赋予了//一些额外的语义,以支持“智能指针”类型:AugPtr ap( new T );ap->f(); // ap.operator ->().operator ->()->f()! getchar();return 0;
}void T::f(){ cout << "Called f!" << endl; }

输出
Called f!
Called f!

C++语言99个常见编程错误 常见错误24:晦涩难懂的operator-相关推荐

  1. 《C语言程序设计:问题与求解方法》——3.9节常见编程错误

    本节书摘来自华章社区<C语言程序设计:问题与求解方法>一书中的第3章,第3.9节常见编程错误,作者:何 勤,更多章节内容可以访问云栖社区"华章社区"公众号查看 3.9 ...

  2. python常见的语法错误_python编程中常见错误

    python编程培训中常见错误 最后,我想谈谈使用更多python函数(数据类型.函数.模块.类等)时可能遇到的问题.由于篇幅有限,我们试图将其简化,特别是一些高级概念.有关更多详细信息,请阅读学习p ...

  3. C#编程中最常见的10个错误

    C#编程中最常见的10个错误 英文原文链接:https://www.toptal.com/c-sharp/top-10-mistakes-that-c-sharp-programmers-make 原 ...

  4. R语言ggplot2可视化在散点图中的每个点上绘制两个错误条:常见的是垂直错误条,它对应于Y值点上的错误(error bar),添加与X轴(水平)相关的错误条(error bar)

    R语言ggplot2可视化在散点图中的每个点上绘制两个错误条:常见的是垂直错误条,它对应于Y值点上的错误(error bar),添加与X轴(水平)相关的错误条(error bar) 目录

  5. C语言程序设计 | 动态内存管理:动态内存函数介绍,常见的动态内存错误,柔性数组

    动态内存管理目录: 动态内存函数的介绍 常见的动态内存函数的错误 柔性数组 为什么会有动态内存管理呢 我们在日常使用中,创建一个数组,一个变量时都会开辟空间 如: int a; //在栈上开辟一个四字 ...

  6. c语言调试时出现的三种错误,C语言课件 第十四章 常见错误和程序调试

    <C语言课件 第十四章 常见错误和程序调试>由会员分享,可在线阅读,更多相关<C语言课件 第十四章 常见错误和程序调试(36页珍藏版)>请在人人文库网上搜索. 1.第十四章常见 ...

  7. c语言数组常见错误,C语言数组在使用中常见的几种错误.pdf

    S C i 卜NOL & TE Q 月N创,)<白Y INI: 口书明A T I仁别 T 技 术 C 语言数组在使用 中常见 的几种错误 刘莉娜 (包头农牧学校 0 14030) 摘 要 ...

  8. C 语言解 常见编程题

    目录 文章目录 目录 常见编程题各解法 0 交换值 1 累计和 2 Fibonacci 数列 ① 第N项 / 前N项 ② 前N项和 3 水仙花数 4 最大公约数与最小公倍数 5 完数 6 N的阶乘 ① ...

  9. golang-文章翻译-go常见的10种错误

    文章目录 一.枚举默认值和json反序列化 二.BenchMarking和内联 三.每次传参都应该用指针吗? 四.break和条件控制语句 五.错误管理 六.数组初始化 6.1 len 和 cap 6 ...

  10. 在编程中常见的一些英语词汇

    下面是一些在编程时常见的一些英语词汇. Data Structures 基本数据结构 Dictionaries 字典 Priority Queues 堆 Graph Data Structures 图 ...

最新文章

  1. Java基础知识强化之IO流笔记03:throws的方式处理异常
  2. 2.5Gb/s混合集成光发射机
  3. SimpleInjector 简单使用
  4. 微软洪小文:AI将成为人类未来最好的左脑
  5. ubuntu 安装星际译王词典
  6. Visual Studio for Mac Preview离线下载安装
  7. Java High CPU故障排除指南–第1部分
  8. java 图片上传 预览 demo_图片上传预览
  9. 20.10-20.15 shell:for,while循环,break,continue,exit
  10. Markdown 语法速查表
  11. Axis1.4容器WebService服务发布过程
  12. [可道云文件管理kodbox 1.15] 企业网盘+云端文档管理+批量上传下载文件夹+移动端H5优化
  13. 语音播报收款Java_Android实现收款成功金额的语音播报功能
  14. PyQt上位机软件开发简介
  15. 网站监控服务都包括哪些具体内容?
  16. java记忆翻牌,原生JS实现记忆翻牌游戏
  17. 利用ADB固定Android手机的CPU频率
  18. 访问对象存储资源下载变成预览
  19. python之具名元组
  20. 功能性与非功能性需求

热门文章

  1. 十分钟超简单完成百度地图3.0离线功能
  2. Matlab求一阶导数
  3. pycharm连接不上远程服务器
  4. 阿里无影云电脑 试用评测
  5. 悉尼mit it硕士选课 INFO5990
  6. 联想笔记本电脑insert键占用,当鼠标变成小方块时,如何解决
  7. 「13」朴素贝叶斯Python实战:计算打喷嚏的工人患病的概率
  8. (组合数+快速幂+lucas+费马小引理)acwing 887. 求组合数 III
  9. java dma_Kernel DMA
  10. 使用application记录页面访问次数