学习笔记之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 ...
随机推荐
- javascript method.
//**************************************************************** //* 名 称:DataLength //* 功 能:计算数据的长 ...
- Spring ApplicationListener使用方法及二次调用问题解决
使用场景 在一些业务场景中,当容器初始化完成之后,需要处理一些操作,比如一些数据的加载.初始化缓存.特定任务的注册等等.这个时候我们就可以使用Spring提供的ApplicationListener来 ...
- python 判断列表的包含关系
def is_Sublist(l, s): sub_set = False if s == []: sub_set = True elif s == l: sub_set = True elif le ...
- android:点击popupwindow以外区域 popupwindow自动消失
方法一(这种方法可以处理popupwindows dimiss的时候一些其他的操作,比如让其他控件的隐藏,消失等): 代码如下popupWindow.setFocusable(false);//foc ...
- 设计点滴&css效果点滴
走向设计师的第一步, 做一个自由的设计师. 优秀的移动端设计的:http://www.cnblogs.com/coding4/p/6842849.html 一些好的设计图片的收藏,一些好的设计理念,一 ...
- Sum Problem
2018-04-22 19:59:52 Sum系列的问题是Leetcode上的一个很经典的系列题,这里做一个简单的总结. 167. Two Sum II - Input array is sorted ...
- SQLPLUS的乱码问题
我的中文系统,把对应非unicode字符时的设置,改成了 日文, 结果控制台使用sqlplus时候,总是出现乱码. 解决方法是,把NLS_LANG环境变量变成跟系统一样,就可以了. american_ ...
- Android------Button 添加声音效果(两种方式)
我在先前的案例<Android 的底部导航栏 BottomNavigationBar>中添加以底部 的4个按钮切换添加声音 下来看看案例效果图 使用添加依赖 compile 'com.as ...
- 加载样式js
var MaskUtil = (function(){ var $mask,$maskMsg; var defMsg = '数据导出中,请稍待...'; function init(){ if(!$m ...
- (UDP)socket编程
body, table{font-family: 微软雅黑; font-size: 10pt} table{border-collapse: collapse; border: solid gray; ...