学习笔记之C++ Primer中文版(第五版)
非常权威系统的语言书,正好学习下C++11内容。
C++ Primer_百度百科
http://baike.baidu.com/link?url=YLvDJE9w3CjGp3eQwjuXYKUZs7vTcOttzSGg-4hmf0Cnci4ncDNRlremuq_bPKyUCyJFam1whnYz3vfrQw1ILaOckUWhq5M59AqjuUBhi0O
- C++是一种静态数据类型语言,它的类型检查发生在编译时。
- 当明确知晓数值不可能为负时,选用无符号类型。
- 使用int执行整数运算。如果数值超过int的表示范围,使用long long。
- 在算术表达式中不要使用char或bool,只有在存放字符或布尔值时才使用它们。
- 执行浮点数运算选用double。
- unsigned char c = -1; // 假设char占8 bit,c的值为255
- 当赋值给无符号类型一个超出它的范围的值时,结果是初始值对无符号类型表示数值总数取模后的余数。
- 当赋值给带符号类型一个超出它的范围的值时,结果是未定义的。
- 程序也应该尽量避免依赖于实现环境的行为。如果把int的尺寸看成是一个确定不变的已知值,那么这样的程序就称作不可移植的。
- 当一个算术表达式中既有无符号数又有int值时,那个int值就会转换成无符号数。
- 切勿混用带符号类型和无符号类型。
- 初始化不是赋值,初始化是创建变量时赋予其一个初始值,而赋值的含义是把对象的当前值擦除,而以一个新值来替代。
- C++11无论是初始化对象还是某些时候为对象赋新值,都可以使用一组由花括号括起来的初始值了(列表初始化)。
- 如果我们使用列表初始化且初始值存在丢失信息的风险,则编译器会报错。
- 定义在函数体内部的内置类型参数将不被默认初始化。
- 如果想声明一个变量而非定义它,就在变量名前添加关键字extern,而且不要显示的初始化变量。
- 建议:当你第一次使用变量时再定义它。
- 引用并非对象,只是为一个已经存在的对象所起的另一个名字。所以不能定义引用的引用。
- 引用必须初始化,而且只能绑定在对象上。
- C++11最好用nullptr初始化指针得到空指针,同时尽量避免使用NULL。
- 一旦定义了引用,就无法再令其绑定到另外的对象。
- 如果你认定一个变量是常量表达式,那就把它声明成constexpr类型。
- C++11规定了新的方法用别名声明来定义类型的别名,关键字using。
- C++11引入了auto类型说明符。auto让编译器通过初始值来推算变量的类型。显然,auto定义的变量必须有初始值。
- 因为一条auto的声明语句只能有一个基本数据类型,所以该语句中所有变量的初始数据类型必须一样。
- C++11引入了第二种类型说明符decltype,它的作用是选择并返回操作数的数据类型。
- decltype((variable)) (双层括号)的结果永远是引用,而decltype(variable)结果只有当variable本身是引用时才是引用。
- 最好不要把对象的定义和类的定义放在一起。
- 为了确保各个文件中类的定义一致,类通常定义在头文件中,而且类所在头文件的名字应与类的名字一样。
- 头文件即使没有被包含在任何其他头文件中,也应该设置保护符(#define, #ifdef, #ifndef, #endif),防止重复包含的发生。
第3章 字符串、向量和数组
- 位于头文件的代码,一般来说不应该使用using声明。这是因为头文件的内容会拷贝到所有引用它的文件中去,如果头文件里有某个using声明,那么每个使用了该头文件的文件都会有这个声明。对于某些程序来说,由于不经意间包含了一些名字,反而可能产生始料未及的名字冲突。
- 使用=初始化变量,实际上执行的是拷贝初始化。与之相反,不使用=,则是直接初始化。
- 如果表达式中有size()函数就不要再使用int了,这样可以避免混用int和unsigned可能带来的问题。
- C++中字符串字面值并不是标准库类型string的对象。切记,字符串字面值与string是不同的类型。
- cctype头文件中定义了一组标准库函数来处理string对象中的字符。
- 如果想对string对象中的每个字符做操作,C++11最好的方法是用范围for (range for)语句。
- size()函数返回的是一个string::size_type类型的值,这些配套类型体现了标准库类型与机器无关的特性。
- string对象的下标必须大于等于0而小于s.size()。使用超出此范围的下标将引发不可预知的结果,以此推断,使用下标访问空string也会引发不可预知的结果。
- vector是模版而不是类型,由它生成的类型必须包含vector中元素的类型,如vector<int>。
- C++新标准提供了另外一种为vector对象的元素赋初始值的方法,即列表初始化。用花括号括起来的0个或多个值被赋给vector对象。
- 范围for语句内部不应改变其所遍历序列的大小。
- vector对象的类型总是包含着元素的类型。E.g. vector<int>::size_type。
- vector对象及string对象的下标运算符可用于访问已存在的元素,而不能用于添加元素。
- 只能对确知已存在的元素执行下标操作。否则buffer overflow。确认下标合法的一种有效方法就是尽可能使用范围for语句。
- 如果容器为空,则begin和end返回的是同一个迭代器,都是尾后迭代器。
- 因为end返回的迭代器并不实际指示某个元素,所以不能对其进行递增或解引用的操作。
- 如果vector对象或string对象是常量,只能使用const_iterator。
- 为了便于得到const_iterator类型的返回值,C++11引入了两个新函数cbegin()和cend()。
- 箭头运算符(->)把解引用和成员访问两个操作结合在一起。I.e. it->mem == (*it).mem。
- 但凡是使用了迭代器的循环体,都不要向迭代器所属的容器添加元素。
- 数组的维度必须是一个常量表达式constexpr。
- 在使用数组下标的时候,通常将其定义为size_t类型。这是一种机器相关的无符号类型,被设计的足够大以便能表示内存中任意对象的大小。在cstddef头文件中定义了size_t类型。
- 内置的下标运算符所用的索引值不是无符号类型,这点与vector和string不一样。
- 使用范围for语句处理多维数组,除了最内层的循环外,其他所有循环的控制变量都应该是引用类型。
- end是string和vector的成员,返回一个尾后迭代器,位于容器尾元素的下一位置。也是一个标准库函数,输入一个数组,返回指向该数组尾元素的下一位置的指针。
第4章 表达式
第14章 重载运算与类型转换
- 通常,输出运算符应该主要负责打印对象的内容而非控制格式,输出运算符不应该打印换行符。
- 输入输出运算符必须是普通非成员函数,而不能是类的成员函数。否则,它们的左侧运算对象将是我们的类的一个对象。假设输入输出运算符是某个类的成员,则它们也必须是istream或ostream的成员。然而,这两个类属于标准库,并且我们无法给标准库中的类添加任何成员。当然,IO运算符通常需要读写类的非公有数据成员,所以IO运算符一般被声明为友元。
- 输入运算符必须处理输入可能失败的情况,而输出运算符不需要。
学习笔记之C++ Primer中文版(第五版)的更多相关文章
- 《C++Primer》第五版习题答案--第三章【学习笔记】
[C++Primer]第五版[学习笔记]习题解答第三章 ps:答案是个人在学习过程中书写,可能存在错漏之处,仅作参考. 作者:cosefy Date: 2020/1/10 第三章:字符串,向量和数组 ...
- 《C++Primer》第五版习题解答--第四章【学习笔记】
[C++Primer]第五版习题解答--第四章[学习笔记] ps:答案是个人在学习过程中书写,可能存在错漏之处,仅作参考. 作者:cosefy Date: 2020/1/11 第四章:表达式 练习4. ...
- 《C++Primer》第五版习题答案--第五章【学习笔记】
<C++Primer>第五版习题答案--第五章[学习笔记] ps:答案是个人在学习过程中书写,可能存在错漏之处,仅作参考. 作者:cosefy Date: 2020/1/15 第五章:语句 ...
- 《C++Primer》第五版习题答案--第六章【学习笔记】
<C++Primer>第五版习题答案--第六章[学习笔记] ps:答案是个人在学习过程中书写,可能存在错漏之处,仅作参考. 作者:cosefy Date: 2020/1/16 第六章:函数 ...
- 推荐《C Primer Plus(第五版)中文版》【worldsing笔记】
老外写的C书,看了你会有一种哇塞的感觉,这里提供PDF扫描版的下在,包含数内的例程,请大家支持原版!! C Primer Plus(第五版)中文版.pdf 下载地址:http://pan.bai ...
- Primer C++第五版 读书笔记(一)
Primer C++第五版 读书笔记(一) (如有侵权请通知本人,将第一时间删文) 1.1-2.2 章节 关于C++变量初始化: 初始化不是赋值,初始化的含义是创建变量时赋予其一个初始值,而赋值的含义 ...
- c++学习书籍推荐《C++ Primer(中文版)(第5版)》下载
百度云及其他网盘下载地址:点我 编辑推荐 <C++ Primer(中文版)(第5版)>编辑推荐:一书在手,架构无忧:三十位一线架构师真知实践:百位架构师献计献策:十万文字尽显架构精华. 媒 ...
- C Primer Plus(第五版)1
这是C Primer Plus(第五版)的第一章,上传上来主要是方便我进行做笔记,写注释,还有我会删掉一些“废话”等. 1.1 C语言的起源 贝尔实验室的 Dennis Ritchie 在1972年开 ...
- C++ Primer中文版(第5版)
<C++ Primer中文版(第5版)> 基本信息 作者: (美)Stanley B. Lippman(斯坦利 李普曼) Josee Lajoie(约瑟 拉乔伊) Barbar ...
随机推荐
- 【转】Scala基础知识
原文地址.续 课程内容: 关于这节课 表达式 值 函数 类 继承 特质 类型 apply方法 单例对象 函数即对象 包 模式匹配 样本类 try-catch-finally 关于这节课 最初的几个星期 ...
- Java中处理异常的9个最佳实践
Java中的异常处理不是一个简单的话题.初学者很难理解,甚至有经验的开发人员也会花几个小时来讨论应该如何抛出或处理这些异常. 这就是为什么大多数开发团队都有自己的异常处理的规则和方法.如果你是一个团队 ...
- Android之修改用户头像并上传服务器(实现手机拍照和SD卡选择上传)
写了这么多个的APP,最近才把他这个功能写上来,就抽取其中的用户修改头像的相关操作这个功能写了这篇博客,来与大家分享,希望对你有所帮助. 案例包含了: Xutil图片上传 拍照和SD卡选择图片 图片缓 ...
- hdu4280网络流之dinic
这题就是个模板题,不过我是第一次写dinic,好久没用链式前向星又不会了... 时间:9126ms #include<map> #include<set> #include&l ...
- Hive之基本操作
1,CREATE table. CREATE [EXTERNAL] TABLE [IF NOT EXISTS] table_name [(col_name data_type [COMMENT col ...
- CSS border 属性和 border-collapse 属性
border 简写属性在一个声明设置所有的边框属性. 可以按顺序设置如下属性: border-width border-style border-color 如果不设置其中的某个值,也不会出问题,比如 ...
- IOS-高仿bilibili项目
高仿bilibili项目成长之路 (logo) 高仿bilibili项目 Github链接:(https://github.com/MichaelHuyp/Bilibili_Wuxianda) 目前完 ...
- vue触底,触顶事件
data(){ return{ songList: [], //歌单列表 totalPage: "", total: "", pageSize: 10, thi ...
- Double H4.0
Double H4.0 修改完善已提交的需求规格说明书 https://docs.qq.com/doc/DTGxWRkh6c3ZLVldq?tdsourcetag=s_pcqq_file_edit&a ...
- android中LayoutInflater.from(context).inflate的分析
在应用中自定义一个view,需要获取这个view的布局,需要用到 (LinearLayout) LayoutInflater.from(context).inflate(R.layout.conten ...