第一章

  1.1 :编写一个简单的c++程序

  • main函数的返回类型必须为int, 即整数类型。
  • 大多数系统中,main的返回值被用来指示状态。返回值0表示成功,非0的返回值的含义由系统定义,通常用来指出错误类型。
  • 编译器通常都包含一些选项,能对有问题的程序结构发出警告。打开这些选项通常是一个好的习惯。我们习惯在GNU编译器中使用-wall选项, 在微软编译器中使用/w4

  1.2: 初始输入输出

  • iostream包括istream和ostream, 输入流和输出流
  • 标准库定义了4个IO对象,cin, cout, cerr, clog
  • 写入std::endl的效果是结束当前行,并将与设备关联的缓冲区中的内容刷到设备中

  1.3: 注释简介

  • 错误的注释比完全没有更糟糕
  • 注释界定符不能嵌套

  1.4: 控制流

  1.5: 类定义

  大部分操作系统都支持文件重定向

第二章

  2.1: 基本内置类型

  • long long 数据类型为c++11中新定义的
  • 字符类型分为:char、unsigned char、signed char三种类型,char类型实际上会表现为signed char或unsigned char两种类型中的一种,具体是那一种由编译器决定
  • 当明确知晓数值不可能为负时,选用无符号类型
  • 在算术表达式(arithmetic expression)中不要使用char或bool, 只有在存放字符或布尔值时才使用它们,因为类型char在一些机器上是有符号的,而在另一些机器上是无符号的,所以使用char进行运算特别容易出问题。如果你需要使用一个不大的整数,那么明确指定它的类型是signed char或者unsigned char
  • 执行浮点运算选用dobule, 这是因为float通常精度不够而且双精度浮点数和单精度浮点数的计算代价相差无几。事实上,对于某些机器来说,双精度运算甚至比单精度还快
  • 赋值(assignment)给无符号类型(unsigned type)一个超出范围的值时,结果是初始值对无符号类型表示数值总数取模后的余数。例如unsigned char表示的范围是0~255,就应该对256取余。
  • 赋值(assignment)给带符号类型(signed type)一个超出范围的数值时,结果是未定义的(undefined)
  • 不要将有符号类型(signed type)和无符号类型(unsigned type)放在同一表达式中混用,有符号类型(signed type)会自动转成无符号类型(unsigned type),可能会出现意想不到的结果
  • 默认情况下,十进制字面值是带符号数,八进制和十六进制字面值可能是带符号的也可能是无符号的。
  • 十进制字面值的类型是int、long、long long中尺寸最小的那个,前提是这种类型要能容纳下当前值。
  • 八进制和十六进制字面值的类型是能容纳其数值的int、unsigned int、long、unsigned long、long long和unsigned long long中尺寸最小者
  • 如果一个字面值连与之关联的最大数据类型都放不下,将产生错误。short没有对应的字面值
  • 整型字面值不会是负数。如果使用了 -42的十进制字面值,那个负号并不在字面值之内,它的作用仅仅是对字面值取负而已。
  • 默认的浮点型字面值是一个double
  • 泛化的转义序列,其形式是\x后紧跟1个或多个十六进制数字,或者\后紧跟1个、2个或3个八进制数字,其中数字部分表示的是字符对应的数值
  • 如果反斜线\后面跟着的八进制数字超过3个,只有前3个数字与\构成转义序列,例如\1234表示 \123和字符4
  • 如果\x后面跟了多个十六进制数字,所有十六进制数据都将一起构成转义字符,如果超出了范围则可能会报错
  • 可以通过加前缀或后缀来改变字面值的类型
  • 指针的字面值是nullptr

  2.2: 变量(variable)

  • 初始化(initialized)不是赋值(assignment),初始化(initialized)的含义是创建变量(variable)时赋予其一个初始值,而赋值(assignment)的含义是把对象(object)的当前值擦除,而以一个新值来替代
  • C++11中新增了用花括号(curly brace)来初始化(initialized)变量得到了全面应用,这种初始化(initialized)的形式被称为列表初始化(list initialization)
  • 定义(definition)于任何函数体之外的内置变量默认初始化(default initialized)为0
  • 定义(definition)于函数体内的内置类型的对象(object)如果没有初始化(uninitialized),则其值是未定义(undefinition)。类的对象如果没有显式地初始化,则其值(value)由类(class)确定
  • 建议初始化(initialized)每一个内置类型(built-in type)的变量(variable)。虽然并非必须这么做,但如果我们不能确保未初始化(undefinition)后程序的安全,那么这么做不失为一种简单可靠的方法
  • 变量(variable)可以多次声明(declaration),但只能定义(definition)一次
  • 在函数体内部,如果试图初始化(initialized)一个由extern关键字标记的变量(variable),将引发错误

  2.3: 复合类型(compound type)

  • 因为引用(reference)是依靠绑定(bind)实际对象(object)而存在的,所以引用(reference)必须初始化(initialized)。
  • 因为引用(reference)本身不是一个对象(object),所以不能定义(definition)引用(reference)的引用(reference)。
  • 引用(reference)只能绑定(bind)在对象(object)上,而不能与字面值(literal)或某个表达式(expression)的计算结果绑定(bind)在一起. 但是请注意,常引用却可以绑定字面值和表达式。事实上是绑定到了临时量上面,常引用不会引起临时量改变,而普通引用却可以引起临时量改变导致引用与实际对像值不同,所以是非法的。
  • 因为引用(reference)不是对象(object),没有实际地址(address),所以不能定义(definition)指向(point to)引用(reference)的指针(pointer)
  • 指向指针的引用,引用本身不是一个对象,因此不能定义指向引用的指针。但指针是对象,所以存在对指针的引用:int *p, *&r = p; 其中r就是一个指向指针的引用;面对这种复杂类型时,最简单的办法是从右向左阅读r的定义,离变量名最近的符号(此例中是&r的符号&)对变量的类型有最直接的影响,因此r是一个引用。

  2.4:const限定符

  • const对象一旦创建后其值就不能再改变,所以const对象必须初始化
  • 编译器在编译过程中把所有用到const变量的地方,都用const初始值进行替换,如果程序包含多个文件,则每个用了const对象的文件都必须得能访问到它的初始值才行,要做到这一点,就必须在每一个用到变量的文件中都有对它的定义,为了支持这一用法,同时避免对同一变量的重复定义,默认情况下,const对象被设定为仅在文件内有交。当多个文件中出现了同名的const变量时,其实等同于在不同文件中分别定义了独立的变量。
  • 某些时候有这样一种const变量,它的初始值不是一个常量表达式,但又确实有必要在文件间共享。这种情况下,我们不希望编译器为每个文件分别生成独立的变量。相反,我们想让这类const对象像其它对象一样工作,也就是说,只在一个文件中定义const,而在其他多个文件中声明并使用它,解决的办法是,对于const变量不管是声明还是定义都添加extern关键字,这样只需定义一次就可以了
  • const与引用,看2.3引用

转载于:https://www.cnblogs.com/smallcroco-blog/p/6283582.html

C++ Primer 第五版读书笔记相关推荐

  1. C++ Primer 第三版 读书笔记

    1.如果一个变量是在全局定义的,系统会保证给它提供初始化值0.如果变量是局部定义的,或是通过new表达式动态分配的,则系统不会向它提供初始值0 2.一般定义指针最好写成:" string * ...

  2. C++Primer PLus 第五版读书笔记

    处理第一个问题: 1)某书店以文件形式保存其每一笔交易.没一笔交易记录某本书的销售情况,含有ISBM.销售册数和销售单 价.每一笔交易形如:0-201-70352-X 4 24.99 -------- ...

  3. C++Primer第五版学习笔记

    <C++ Primer>Learning Note 程序实例下载地址:http://www.informit.com/title/0321714113 第一章            开始 ...

  4. c++ primer 第五版 阅读笔记四

    第四章 复合类型 4.1 数组 数组的声明:关于数组的内容写了蛮多的,包括一维数组和二维数组的创建.调用.返回等等,甚至用到了static和new/delete关键字,详见:(一维数组相关内容)htt ...

  5. c++ primer第五版----学习笔记(十五)Ⅱ

    部分习题解答: 15.1: 虚成员即为虚函数 15.2: protected受保护的成员,其派生类可以访问其成员:而private私有成员,其派生类不可以访问 15.3: #ifndef QUOTE_ ...

  6. C++ Primer 第五版 第6章——函数阅读笔记及习题答案(完整,附C++代码)

    C++Primer(第五版)第6章函数的阅读笔记及课后习题答案总结,课后习题答案是自己学习写出来的,如果有误,欢迎指正 还不完整,后续会更新添加 阅读笔记 C++ Primer 第五版 第6章 6.1 ...

  7. C++ Primer 第五版 第6章 6.7——函数指针阅读笔记

    习题答案请参考:C++ Primer 第五版 第6章 6.7--函数指针习题答案 目录 6.7 函数指针 使用函数指针 返回指向函数的指针 6.7 函数指针 声明一个函数指针,只需要用指针替代函数名即 ...

  8. C++ Primer 第五版 第6章 6.3——函数返回类型和return语句阅读笔记

    习题答案请参考:C++ Primer 第五版 第6章 6.3--函数返回类型和return语句习题答案 目录 6.3 返回类型和return语句 6.3.1 无返回值函数 无返回值函数的特性 6.3. ...

  9. C++ Primer 第五版 第6章 6.2——函数参数传递阅读笔记

    习题答案请参考:C++ Primer 第五版 第6章 6.2--函数参数传递习题答案 目录 6.2 函数参数传递 6.2.1 传值参数(值传递) 指针形参 6.2.2 传引用参数(引用传递) 使用引用 ...

  10. C++ Primer 第五版 第6章 6.1——函数及函数定义及调用阅读笔记

    习题答案请参考:C++ Primer 第五版 第6章 6.1 函数及函数定义及调用习题答案 目录 6.1 函数基础 函数定义 函数调用 函数的形参和实参 函数的返回类型 局部静态对象 函数声明 头文件 ...

最新文章

  1. 漫谈五种IO模型(主讲IO多路复用)
  2. 邬贺铨:工业物联网的技术与前景
  3. memcached 实验论文
  4. Linux下中文man帮助安装。
  5. map和hasmap的区别
  6. 浅析Banner设计
  7. protel四层板及内电层分割入门
  8. springboot开启声明式事务
  9. 【Scratch案例实操】scratch变魔术 scratch编程案例教学 scratch创意编程 少儿编程教案
  10. O'Reilly Java系列书籍建议阅读顺序(转自蔡学庸)
  11. git rebase命令实际操作记录
  12. 吉安梵媛:人间最美是——原谅!
  13. bootstrap tooltip不起作用
  14. 引起婴儿湿疹的原因有哪些?
  15. Linux 中断原理之软中断
  16. PHP把JSON转换成数组
  17. PHP文字转语音排号声音_要一个可以将文字转换成声音的软件
  18. TortoiseGit 使用ssh相关问题
  19. ALOS PRISM传感器数据文件的说明
  20. L2-030 冰岛人

热门文章

  1. 程序员锁死服务器导致公司倒闭,案件终于开庭了
  2. 我在华为写了13年代码的一些感悟
  3. 你知道谷歌有个社区叫 GBG 么?
  4. Emscripten 单词_人教版英语八年级上册听力(单词+课文) 朗读录音听力mp3音频电子课本(完整版)...
  5. python基础之字符串类型
  6. 「福利」Java Swing 编写的可视化算法工程,包含树、图和排序
  7. Spring Cloud Sleuth Zipkin - (1)
  8. Spark源码分析之一:Job提交运行总流程概述
  9. C# 中值类型[Required(*****)] 报错
  10. 计算给定坐标系和各个定点坐标的凸多边形的面积