C++语言99个常见编程错误 常见错误24:晦涩难懂的operator-
常见错误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-相关推荐
- 《C语言程序设计:问题与求解方法》——3.9节常见编程错误
本节书摘来自华章社区<C语言程序设计:问题与求解方法>一书中的第3章,第3.9节常见编程错误,作者:何 勤,更多章节内容可以访问云栖社区"华章社区"公众号查看 3.9 ...
- python常见的语法错误_python编程中常见错误
python编程培训中常见错误 最后,我想谈谈使用更多python函数(数据类型.函数.模块.类等)时可能遇到的问题.由于篇幅有限,我们试图将其简化,特别是一些高级概念.有关更多详细信息,请阅读学习p ...
- C#编程中最常见的10个错误
C#编程中最常见的10个错误 英文原文链接:https://www.toptal.com/c-sharp/top-10-mistakes-that-c-sharp-programmers-make 原 ...
- R语言ggplot2可视化在散点图中的每个点上绘制两个错误条:常见的是垂直错误条,它对应于Y值点上的错误(error bar),添加与X轴(水平)相关的错误条(error bar)
R语言ggplot2可视化在散点图中的每个点上绘制两个错误条:常见的是垂直错误条,它对应于Y值点上的错误(error bar),添加与X轴(水平)相关的错误条(error bar) 目录
- C语言程序设计 | 动态内存管理:动态内存函数介绍,常见的动态内存错误,柔性数组
动态内存管理目录: 动态内存函数的介绍 常见的动态内存函数的错误 柔性数组 为什么会有动态内存管理呢 我们在日常使用中,创建一个数组,一个变量时都会开辟空间 如: int a; //在栈上开辟一个四字 ...
- c语言调试时出现的三种错误,C语言课件 第十四章 常见错误和程序调试
<C语言课件 第十四章 常见错误和程序调试>由会员分享,可在线阅读,更多相关<C语言课件 第十四章 常见错误和程序调试(36页珍藏版)>请在人人文库网上搜索. 1.第十四章常见 ...
- c语言数组常见错误,C语言数组在使用中常见的几种错误.pdf
S C i 卜NOL & TE Q 月N创,)<白Y INI: 口书明A T I仁别 T 技 术 C 语言数组在使用 中常见 的几种错误 刘莉娜 (包头农牧学校 0 14030) 摘 要 ...
- C 语言解 常见编程题
目录 文章目录 目录 常见编程题各解法 0 交换值 1 累计和 2 Fibonacci 数列 ① 第N项 / 前N项 ② 前N项和 3 水仙花数 4 最大公约数与最小公倍数 5 完数 6 N的阶乘 ① ...
- golang-文章翻译-go常见的10种错误
文章目录 一.枚举默认值和json反序列化 二.BenchMarking和内联 三.每次传参都应该用指针吗? 四.break和条件控制语句 五.错误管理 六.数组初始化 6.1 len 和 cap 6 ...
- 在编程中常见的一些英语词汇
下面是一些在编程时常见的一些英语词汇. Data Structures 基本数据结构 Dictionaries 字典 Priority Queues 堆 Graph Data Structures 图 ...
最新文章
- Java基础知识强化之IO流笔记03:throws的方式处理异常
- 2.5Gb/s混合集成光发射机
- SimpleInjector 简单使用
- 微软洪小文:AI将成为人类未来最好的左脑
- ubuntu 安装星际译王词典
- Visual Studio for Mac Preview离线下载安装
- Java High CPU故障排除指南–第1部分
- java 图片上传 预览 demo_图片上传预览
- 20.10-20.15 shell:for,while循环,break,continue,exit
- Markdown 语法速查表
- Axis1.4容器WebService服务发布过程
- [可道云文件管理kodbox 1.15] 企业网盘+云端文档管理+批量上传下载文件夹+移动端H5优化
- 语音播报收款Java_Android实现收款成功金额的语音播报功能
- PyQt上位机软件开发简介
- 网站监控服务都包括哪些具体内容?
- java记忆翻牌,原生JS实现记忆翻牌游戏
- 利用ADB固定Android手机的CPU频率
- 访问对象存储资源下载变成预览
- python之具名元组
- 功能性与非功能性需求