常见错误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. 华为汪涛:打造全场景智能联接解决方案,共建行业智能体
  2. java扫描注解_使用Spring Java注释扫描
  3. 【Groovy】Groovy 动态语言特性 ( Groovy 语言与 Java 语言执行效率对比 | 以动态特性编译的 Groovy 类 | 以静态特性编译的 Groovy 类 )
  4. 微信小程序 长按属性
  5. adaboost算法java代码_04-04 AdaBoost算法代码(鸢尾花分类)
  6. mysql 5.6.16 log_mysql-5.6.16装配脚本
  7. Unity经典游戏教程之:是男人就下100层
  8. 什么样性格的人最有可能成为领导者?
  9. kaggle实战:Titanic
  10. L2UWE: A Framework for the Efficient Enhancement of Low-Light Underwater Images阅读札记
  11. 西农大 Java实习 异常处理
  12. 休眠后电脑马上自动唤醒解决
  13. c语言定义未知长度一维数组,c++ 如何定义未知元素个数的数组
  14. 隐藏计算机文件夹中,怎样显示电脑中已隐藏的文件夹
  15. D. Unusual Sequences
  16. 计算机一级考试说说,考试说说心情汇总81句 关于考试的说说
  17. 基于WPF的开发的知识点
  18. convs在MATLAB中,vscon美瞳
  19. COOX培训材料 — PMT(1.Phase)
  20. IDEA设置类注释模板和方法注释模板

热门文章

  1. 表白神器java代码_java制作七夕表白神器的方法
  2. shell脚本中执行ssh
  3. Linux Server中搭建NAS存储服务(一)
  4. 静态网页设计课后练习
  5. [Go]select监听channel
  6. OpenGL 和 DirextX
  7. 啤酒肚真的是喝啤酒引起的吗?
  8. 迅为STM32MP157开发板手册更新记录
  9. 看LIVALL智能头盔是如何借助Google广告和YouTube实现海外众筹“冷启动“?
  10. LLC谐振变换器学习 一