每一位 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)相关推荐

  1. 估算带卷积核二分类0,3的网络的收敛时间和迭代次数

    制作一个网络分类minst的0和3求出这网络的迭代次数曲线表达式n(δ),和准确率表达式p-max(δ),用预期准确率去估算n,并推算需要的时间. 将minst的28*28的图片缩小到9*9,网络用一 ...

  2. OpenCV中使用模板匹配识别空闲的货架空间

    但是点击上方"小白学视觉",选择加"星标"或"置顶" 重磅干货,第一时间送达 假设你是一名在超市工作的员工,被要求在商店里四处走动,检查需要 ...

  3. 部分和模板的复杂嵌套

    本文翻译自:Complex nesting of partials and templates My question involves how to go about dealing with co ...

  4. 体验 PHP under .NET Core

    昨天在 The week in .NET 中发现 Scott Hanselman 的这篇博文 Peachpie - Open Source PHP Compiler to .NET and WordP ...

  5. Diango博客--1.Django的接客之道

    文章目录 0.思路引导 1.实现最简单的HelloWorld 2.实现最简单的HelloWorld(使用Templates) 0.思路引导 django 的开发流程: 即首先配置 URL,把 URL ...

  6. OpenMV常用函数整理

    画图相关 #image为摄像头拍下来的一个图片类 image.draw_line((10,10,20,30), color=(255,0,0)) #画一条线,第一个tuple代表连线的两个点#颜色可以 ...

  7. ASP.NET MVC:多模板支持

    背景 准备写个博客练习一下WEB编程,有一个需求就是多模板支持,类似博客园的自定义模板一样,在ASP.NET MVC中如何处理这个需求呢? 需求 描述 允许自定义模板,比如:传统模板.Metro模板等 ...

  8. Django笔记 CMS框架Mezzanine 2

    pip install mezzanine-pagedown Pygments 3 加入语法高亮和背景定制 自定义网站界面风格的标准做法是创建一个新的application.因为application ...

  9. Django mako 的使用(七)

    Django mako 的使用 6.6 mako 的使用 6.6 mako 的使用 安装 mako pip install mako 创建子应用 makos python .\manage.py st ...

最新文章

  1. mysql 8.0 自定义函数_PHP+Mysql防止SQL注入的方法(life)
  2. 在贪心学院学习,是一种怎样的体验?
  3. Oracle中Merge into的用法实例讲解
  4. 视频参数(流媒体系统,封装格式,视频编码,音频编码,播放器)对比
  5. 对某公司一次***测试
  6. 刘光星- 软件151
  7. 1-4课:程序、编程和算法之间到底有什么三角关系?
  8. 【FAQ】【Push Kit】 华为怎么设置角标
  9. 三角函数π/2转化_1道真题,串讲三角函数图像与恒等变换,兼谈选择题的构思原则 | 真题精讲22...
  10. 当笑神姜涛遇上尼古拉斯赵四,低俗加上恶俗的结果是否就是封杀?
  11. 【第一组】第十六次冲刺例会纪要
  12. Mac——技巧:修复 M1 Mac Mini 蓝牙问题
  13. Qtum量子链发布QIP-19支持隐私资产技术提案
  14. 怎么屏蔽百度搜索时的百度热榜?
  15. 深入理解java虚拟机第一第二部分(周志明第三版)
  16. 字节-测试开发-面试
  17. 多旋翼无人机组合导航系统-多源信息融合算法(Matlab代码实现)
  18. 5G时代的来临,我们应该做好哪些网络安全准备?
  19. 数据通信与网络(五)
  20. 大数据分析工程师DE职能要求

热门文章

  1. frameworks/av/media/CedarX-Projects/CedarAndroidLib/LIB_KK44_/Android.mk: No such file or directory
  2. Android开发如何使用JNA
  3. 前端学习(3234):react生命周期1
  4. react学习(15)---antdesign form两种验证
  5. 前端学习(3122):react-hello-react总结state
  6. [html]说说页面中字体渲染规则是怎样的?会有哪些因素影响字体的渲染?
  7. [css] flex与其他有什么不同,用它有什么好处?
  8. 工作79:获取对应中文
  9. “约见”面试官系列之常见面试题之第九十二篇之created和mounted区别(建议收藏)
  10. remote: Incorrect username or password ( access token ) fatal: Authentication failed for gitee