templates(0.1)
每一位 C++ 程序员都有自己的一套编程风格。这就引来了各种问题:哪儿应该 插入空白符号、怎么摆放分隔符(大括号、小括号)…等等。我们尽量保持全书风格一致, 当然有时候我们也对特殊问题作出让步。例如在教本(初阶)部份我们鼓励以空白符号和较具体的命名方式提高程序可读性,而在高阶主题中,较紧凑的风格可能更加适宜。
我们有一个他人不太常用的习惯,用以声明类型(types)、参数(parameters)和变量(variables), 希望你能多加注意。下面数种方式无疑都是合理的:
void foo (const int &x); void foo (const int& x); void foo (int const &x); void foo (int const& x);
尽管较为罕见,我们还是决定在表达「固定不变的整数」(constant integer)时使用 int const而不写成 const int。这么做有两个原因,第一,这很容易显现出「什么是不能变动的(what isconstant)」。不能变动的量总是 const 饰词之前的那个东西。尽管以下两式等价:
const int N = 100; //一般人可能的写法
int const N = 100; //本书习惯写法
但对以下述句来说就不存在所谓的等价形式了:
int* const bookmark; // 指针 bookmark 不能变动,但指针所指内容(int)可以变动
如果你把 const 饰词放在运算符 * 之前,那就改变了原意。本例之中不能变动的是指针本身,不是指针所指的内容。
第二个原因和语法替换原则(syntactical substitution principle)有关,那是处理 template 程序代码时常会遭遇的问题。考虑下面两个类型定义:
typedef char* CHARS; typedef CHARS const CPTR; // 一个用以「指向 chars」的 const 指针,如果我们做文字上的替换,把 CHARS 替换为其代表物,上述第二个声明的原意就得以保留: typedef char* const CPTR; // 一个用以「指向 chars」的 const 指针。然而如果我们把 const 写在被修饰物之前,上述规则便不适用。考虑上述声明的另一种变化: typedef char* CHARS; typedef const CHARS CPTR; // 一个用以「指向 chars」的 const 指针,现在,对 CHARS 进行文字替换,会导出不同的含义: typedef const char* CPTR; // 一个用以「指向 const chars」的指针
面对volatile饰词,也有同样考虑。关于空白符号,我们决定把他放在"&"符号和参数名称中间:
void foo (int const& x);
这样可以更加突出参数的类型和名称。无可否认,以下声明方式可能较易引起疑惑:
char *a, b;
根据从 C 语言继承下来的规则,a 是个指针而b 是个一般的 char。为了避免这种混淆,我们可以一次声明一个变量,不要集中于同一行声明语句。
本书并不是一本讨论C++标准库的书,但我们确实在一些例子中用到了标准库。一般 来说,我们使用C++特有的 头文件(例如<iostream> 而非<stdio.h>) 。惟一的例外是<stddef.h>,我们使用它而不使用<cstddef>,以避免类型 size_t 和 ptrdiff_t 被冠以 std::前缀词。这样做更具可移植性,而且 std::size_t 并不比 size_t 多出什么好处。
#include<cstdio> #include<iostream> using namespace std; int main() {const int N=100;int const N=100; //二者等价int mark=0;//1int* ref_mark=&mark;int* const book1=ref_mark;//指针book1是个常量,并没有说明这个指针指向的int值是个常量const int* book2=ref_mark;//指针book2是个指针类型的常量cout<<"N1:"<<N1<<endl;cout<<"N2:"<<N2<<endl;*book1=10;cout<<*book1<<endl;*book2=20;/*|error: assignment of read-only location ‘* book2’|const int *book2=ref_mark*/cout<<*book1<<endl;cout<<*book2<<endl;//2typedef char* CHARS;typedef CHARS const CPTR; //替换后typedef char * const CPTR;//仍然是指向char类型的常量指针 typedef const CHARS CPTR; //替换后typedef const char * CPTR;//是指向char类型的指针 }
转载于:https://www.cnblogs.com/jianfengyun/p/3714569.html
templates(0.1)相关推荐
- 估算带卷积核二分类0,3的网络的收敛时间和迭代次数
制作一个网络分类minst的0和3求出这网络的迭代次数曲线表达式n(δ),和准确率表达式p-max(δ),用预期准确率去估算n,并推算需要的时间. 将minst的28*28的图片缩小到9*9,网络用一 ...
- OpenCV中使用模板匹配识别空闲的货架空间
但是点击上方"小白学视觉",选择加"星标"或"置顶" 重磅干货,第一时间送达 假设你是一名在超市工作的员工,被要求在商店里四处走动,检查需要 ...
- 部分和模板的复杂嵌套
本文翻译自:Complex nesting of partials and templates My question involves how to go about dealing with co ...
- 体验 PHP under .NET Core
昨天在 The week in .NET 中发现 Scott Hanselman 的这篇博文 Peachpie - Open Source PHP Compiler to .NET and WordP ...
- Diango博客--1.Django的接客之道
文章目录 0.思路引导 1.实现最简单的HelloWorld 2.实现最简单的HelloWorld(使用Templates) 0.思路引导 django 的开发流程: 即首先配置 URL,把 URL ...
- OpenMV常用函数整理
画图相关 #image为摄像头拍下来的一个图片类 image.draw_line((10,10,20,30), color=(255,0,0)) #画一条线,第一个tuple代表连线的两个点#颜色可以 ...
- ASP.NET MVC:多模板支持
背景 准备写个博客练习一下WEB编程,有一个需求就是多模板支持,类似博客园的自定义模板一样,在ASP.NET MVC中如何处理这个需求呢? 需求 描述 允许自定义模板,比如:传统模板.Metro模板等 ...
- Django笔记 CMS框架Mezzanine 2
pip install mezzanine-pagedown Pygments 3 加入语法高亮和背景定制 自定义网站界面风格的标准做法是创建一个新的application.因为application ...
- Django mako 的使用(七)
Django mako 的使用 6.6 mako 的使用 6.6 mako 的使用 安装 mako pip install mako 创建子应用 makos python .\manage.py st ...
最新文章
- mysql 8.0 自定义函数_PHP+Mysql防止SQL注入的方法(life)
- 在贪心学院学习,是一种怎样的体验?
- Oracle中Merge into的用法实例讲解
- 视频参数(流媒体系统,封装格式,视频编码,音频编码,播放器)对比
- 对某公司一次***测试
- 刘光星- 软件151
- 1-4课:程序、编程和算法之间到底有什么三角关系?
- 【FAQ】【Push Kit】 华为怎么设置角标
- 三角函数π/2转化_1道真题,串讲三角函数图像与恒等变换,兼谈选择题的构思原则 | 真题精讲22...
- 当笑神姜涛遇上尼古拉斯赵四,低俗加上恶俗的结果是否就是封杀?
- 【第一组】第十六次冲刺例会纪要
- Mac——技巧:修复 M1 Mac Mini 蓝牙问题
- Qtum量子链发布QIP-19支持隐私资产技术提案
- 怎么屏蔽百度搜索时的百度热榜?
- 深入理解java虚拟机第一第二部分(周志明第三版)
- 字节-测试开发-面试
- 多旋翼无人机组合导航系统-多源信息融合算法(Matlab代码实现)
- 5G时代的来临,我们应该做好哪些网络安全准备?
- 数据通信与网络(五)
- 大数据分析工程师DE职能要求
热门文章
- frameworks/av/media/CedarX-Projects/CedarAndroidLib/LIB_KK44_/Android.mk: No such file or directory
- Android开发如何使用JNA
- 前端学习(3234):react生命周期1
- react学习(15)---antdesign form两种验证
- 前端学习(3122):react-hello-react总结state
- [html]说说页面中字体渲染规则是怎样的?会有哪些因素影响字体的渲染?
- [css] flex与其他有什么不同,用它有什么好处?
- 工作79:获取对应中文
- “约见”面试官系列之常见面试题之第九十二篇之created和mounted区别(建议收藏)
- remote: Incorrect username or password ( access token ) fatal: Authentication failed for gitee