zl程序教程

您现在的位置是:首页 >  后端

当前栏目

《C++覆辙录》——2.8:效果漂移的型别量化饰词

C++ 效果 量化 2.8
2023-09-11 14:17:35 时间

span 本节书摘来自异步社区出版社《C++覆辙录》一书中的第2章,第2.8节,作者: 【美】Stephen C. Dewhurst(史蒂芬 C. 杜赫斯特),更多章节内容可以访问云栖社区“异步社区”公众号查看。

2.8:效果漂移的型别量化饰词

内建数组不可能有常量性或挥发性,所以修饰它的型别量化饰词(const或volatile)的效果实际上会漂移,转而应用到其持有物的某个适当位置:

typedef int A[12];

extern const A ca; // 由12个常量整数型别元素构成的数组

typedef int *AP[12][12];

volatile AP vm; // 指涉到整数型别元素的挥发性指针构成的二维数组```

volatile int *vm2[12][12]; // 指涉到挥发性整数型别元素的指针构成的二维数组

以上的解释合情合理,因为所谓数组,其名字的意义也不过就是指涉到其元素的指针。它本身并不占用存储,从而也谈不上什么常量性或挥发性这些和存储状态相关的概念,所以量化饰词的效果实际是应用到数组的元素上去了。不过要保持警惕,编译器经常对付不了太过复杂的情况。举例来说,`vm`的型别常常被编译器错误地解释成和`vm2`的型别是一样的21。

对函数声明的处理方式比较含糊。过去,一般的C++语言实现也允许相同的量化饰词效果漂移:

typedef int FUN(char *);
typedef const FUN PF; // 原先的情况:PF指涉到一个返回const int的函数
// 现在:非法`
现在标准却说,应用于函数声明量化饰词只能用于声明一个“顶级”的 typedef,并且这个typedef还只能用于声明一个非静态的成员函数22:

typedef int MF() const;

MF nonmemfunc; // 错误! 

class C{

 MF memfunc; // 没问题

};```

最好还是避免这种用法,当下的编译器并不能很好地理解它,而且它还会给维护工程师带来诸多困惑。

C++ Primer Plus 第6版 读书笔记(2)第2章 开始学习 C++ C++是在 C 语言基础上开发的一种集面向对象编程、泛型编程和过程化编程于一体的编程语言,是C语言的超集。本书是根据2003年的ISO/ANSI C++标准编写的,通过大量短小精悍的程序详细而全面地阐述了 C++的基本概念和技术,并专辟一章介绍了C++11新增的功能。
C++ STL学习之【反向迭代器】 适配器模式是 STL 中的重要组成部分,在上一篇文章中我们学习了 容器适配器 的相关知识,即 stack 与 queue,除了 容器适配器 外,还有 迭代器适配器,借助 迭代器适配器,可以轻松将各种容器中的普通迭代器转变为反向迭代器,这正是适配器的核心思想
C++ STL学习之【容器适配器】 适配器(配接器)是 STL 中的六大组件之一,扮演着轴承、转换器的角色,使得 STL 中组件的使用更为灵活,比如 栈和队列 就是属于适配器而非容器,以及神秘的反向迭代器也属于适配器
C++ STL学习之【vector的模拟实现】 vector 是 STL 中的容器之一,其使用方法类似于数据结构中的 顺序表,得益于范型编程和 C++ 特性的加持,vector 更强大、更全能;在模拟实现 vector 时,还需要注意许多细枝末节,否则就很容易造成重复析构及越界访问
C++ STL学习之【vector的使用】 vector 是表示可变大小数组的序列 容器,其使用的是一块 连续 的空间,因为是动态增长的数组,所以 vector 在空间不够时会扩容;vector 优点之一是支持 下标的随机访问,缺点也很明显,头插或中部插入效率很低,这和我们之前学过的 顺序表 性质很像,不过在结构设计上,两者是截然不同的
C++ STL学习之【string类的模拟实现】 string 本质上就是一个专注于存储字符的顺序表,使用起来很方便;但在模拟实现 string 时,有许多值得注意的点,下面就来看看 string 类是如何诞生的吧
异步社区 异步社区(www.epubit.com)是人民邮电出版社旗下IT专业图书旗舰社区,也是国内领先的IT专业图书社区,致力于优质学习内容的出版和分享,实现了纸书电子书的同步上架,于2015年8月上线运营。公众号【异步图书】,每日赠送异步新书。