《C++ Primer 第四版》笔记与勘误1

C++ Primer Plus (第五版)中文版 勘误 C++ Primer Plus (第五版)中文版 勘误表 (不断更新) 这是我在读《c++ Primer Plus》中发现的明显的错误 中文版第4页倒数第18行 错误程度:***“http://www.research.att.com/-bs/”网页错了,应该是“http://www.research.att.com/~bs/”也不说什么了。中文版第9页 21行 (好像是OCR 才能犯 阅读详情
 

《C++ Primer 第四版》笔记与勘误1
---------------------------------
以下笔记按在书中出现的先后顺序来记载

P6  cout<<std:endl; 是刷新输出流缓冲区的方法之一。及时刷新缓冲区,能避免调试程序时如果程序崩溃我们对出错位置的错误判断。

P7 一般出现空格符的地方都可以用换行符替代,只有两个例外:一是预处理指示中,二是字符串文字量中。

P23 默认情况下,读cin或程序结束时,都会刷新cout。cerr不带缓冲,clog则带。

P23 表达式是最小的计算单元,通常含有一个或多个操作数,并通常含有一个操作符。

P30 C++标准规定了每个算术类型的最小存储空间,但是不阻止编译器使用更大的存储空间。对于int,几个每个编译器都使用比标准规定的存储空间大的空间。

P30 C++算术类型共9种,其中整型6种,浮点型3种。

P31 int, short,long都默认为带符号型。而char则是由编译器决定默认是否带符号。在VC7中,char默认也是带符号的。

P32  unsigned 默认表示unsigned int。

P32  signed类型如何取值,如何用位来表示是依赖于编译器的。

P32 如果被赋予超过取值范围的值,一般编译器不会报非法,而是对对象取模,比如将-1赋予unsigned对象,得255。(-1对256取模后的值)。但也有编译器不是这样实现的。

P33 对标准库的计算建议使用size_type,浮点型计算建议使用double。

P33 大多数机器使用与long相似的32位来表示int;某些机器上,用double计算比float计算要快。

P34 只有内置类型存在字面值literal constant;换句话说,任何字面值都必然属于某个内置类型。

P35 对于字面值,整型的可以在后面加L或U,前面加0或0X;浮点型可以在后面加L,f或E;字符型的可以在前面加L。

P41 C++共有63个关键字。

P42 一般来说,“直接初始化”(圆括号的初始化)比“复制初始化”(用等号的初始化)更灵活和效率更高。

P45 建议每个内置类型的变量都要初始化,虽然这样做有时候不是必须的。

P46 带初始化值的声明被认为是定义。

P48 在对象第一次被使用的地方才定义对象,可以提高程序的可读性。

P50 重要:非const变量默认就是extern的,但const常量默认却是局部于它所在的文件的(目的是当它们是被常量表达式所初始化时,能被放到头文件中,见P59)。所以,要想像让const常量获得像普通变量那样的作用域,必须在它的初始化式的前面加上extern。

P51 引用是一种复合类型,“复合类型”是指用其他类型定义的类型。
除了不能定义引用类型的引用外,可以定义其它任何类型的引用。
引用必须用与该引用同类型的对象来初始化。
引用不能被重绑定到另一对象。

引用只是它绑定的对象的别名,任何作用在引用上的操作,实际都是作用在它绑定的对象上。

P52 只有const引用才可以用常量值或不同类型的变量初始化。非const引用则不可以。

P53 枚举的主要作用是定义一组整数常量集,同时指出它们是关联的。

P54 枚举成员值可以是不唯一的。
每个enum语句都定义了一种惟一的类型。对它的使用方式类似于类类型的普通变量。

P55  class和struct的惟一区别是前者的访问级别默认为private,后者则默认为public。

P59 头文件不应该含有定义,但有三个例外:一是const常量,二是inline函数,三是类头的定义。

P59 被常量表达式所初始化的const常量应该放到头文件中,否则则不然。

P61 可以用定义在头文件里的实体(比如类)名来命名预处理器变量,来避免预处理器变量重名的问题,从而避免头文件内容的重复包含,比如 #ifndef SALESITEM_H

P63 复合类型是指通过其他类型定义的类型,比如:引用,指针和数组。

P64 对象是具有类型的一段内存区域,变量则是有名字的对象。

P64 预处理器继承自C语言,C++的特征大量减少了它的使用,但仍然保留一个很重要的用法:#include

P64 作用域是程序的一部分,在其中的名字有意义(能起作用)。C++共有6种作用域,由小到大为:语句(如if),块(大括号中),局部(也称函数内),命名空间(指namespace大括号内),类(类体的大括号中),全局(在任何以上五种作用域以外的,也称文件?)

作用域可以嵌套,即在大的作用域中声明的名字在小作用域中依然有效。

P65  C++是一种静态类型语言,意思是它是在编译时进行类型检查的语言,在编译时验证表达式中出现的所有类型,是否可以执行它所需要的操作。变量在使用前必须被声明或定义。

P65 “word(字)”是在给定机器上进行整型计算的原始单元。通常一个字足以容纳一个地址。典型地,对于一个32位的机器来说,一个字是4个字节。

P67 标准库中其中两种最重要的类型是:string 和vector,它们分别定义了大小可变的字符串和集合。它们往往将迭代器用作伴随类型,用于访问自身中的元素。

P69 在头文件中应该总是使用带名字空间限定的名字,比如std::cout。(意思是带限定的方式是对名字空间污染比较小的方式了,比起 using namespace std;来说。而头文件因为“其内容会完全拷贝到包含它的文件中”,所以应该取污染比较小的方式。)

P72  getline()函数的用处之一是读入输入流中有效字符之前的空白字符。

P73标准类型中常见的成员size_type比起unsigned的优势是,它是与机器无关的。所以,在作为下标/索引,或存储大小时,都建议用它,比如:
string::size_type  ix;
s1[ix]=’*’;
ix=s1.size();

P74 多数计算机上,涉及到字符串比较中的单个字符时,大写字母小于小写字母。

P75 表达式计算时要考虑到结合性(比如是左结合(从左到右)还是右结合),
如下两个赋值语句:
string s1;
string s2 = s1 + “a” + “b”;
string s3= “a” + “b” + s1;
前者是合法的,后者则否;原因正在于string中的“ + ”号操作符是左结合的。

P78 C++标准库除了定义了特定于C++本身的一些库外,还包含了C标准库。C标准库原来的头文件的名称为.h,在C++中命名为<cxxx>,并被包含于名字空间std的域内。

P79 vector是一个类模板,vector才是一种数据类型。

P80 重要:对于vecotr,比起对给定个数的它预先分配内存,更有效的方法是先初始化一个空的vector元素,再动态地往里面添加元素。

P82  C++程序员习惯于优先使用!=而不是<作为循环的判断条件。这个习惯来自于泛型编程,有其合理性。

P82 在循环判断中动态地调用size()而不是提前调用并保存其值,同样有其合理性。因为有些数据结构比如vector是可以在循环中动态增长的。

P84 在标准库中,只有少数的容器(比如vector)支持下标操作,而所有容器都支持迭代器(都定义一个名为iterator的类型)。因此,建议优先使用迭代器。

P86  const_iterator是一个指向常量的iterator。

P87 difference_type的作用与size_type类似,区别在于它是signed型而已。

P88 任何改变vector长度的操作,都会使已存在的迭代器失效。

P88 bitset与vector类似都是一个类模板,不过它各个对象之间的区别在于大小而不在于类型,比如bitset<32> bitvec;

P89 bitset匹配时是从低阶开始匹配的。

(未完待续)

---------------------------------
以下个人勘误按在书中出现的先后顺序来记载

P13(第13页) “不是所有编译器都有这一要求”后半句应翻译为“都满足这一标准”。
影响阅读程度:严重

说明:“编译器”如何能“要求”C++标准?原英文版中的“enforce”应翻译为“满足”而不是“有”,动宾关系才不会搞反。

P43 “有多个初始化式时不能使用复制初始化”前半句应翻译为“有多个初始化参数时”。
影响程度:一般

P45 “如果定义某个类的变量时没有提供初始化式….”这句和后一句应翻译为“如果定义某个类的变量时没有提供初始化参数,那么系统会调用该类的’缺省构造函数’。”
影响程度:一般

P50 有三处的“const变量”翻译为“const常量”或“const对象”比较好,虽然原英文版有两处也是用const variable。
影响程度:轻微

P52 “仅允许const引用绑定到需要临时使用的值”应翻译为“仅允许const引用绑定到需要临时值中转来完成绑定过程的对象”
影响程度:严重

说明:译者对宾语的主体理解错误。原英文版中的“临时使用的值”是用来修饰value(对象)的,不是最终的宾语。
因为对于程序员来说,编译器做的中转工作是透明的,const引用最终还是绑定到对象,虽然结果相同。

P65 “word(字)机器上的自然的整型计算单元”应翻译为“word(字)是在给定机器上进行整型计算的原始单元”
影响程度:一般

P79 “v4含有值初始化的元素”这句应翻译为“v4含有n个用缺省构造函数中的值初始化的元素”
影响程度:严重

P79 “动态地添加元素”这句应翻译为“当元素值已知时,最好是通过动态地向它添加元素,来让它增长。”
影响程度:一般

C primer plus 第五版 中文版 勘误 前面部分是别人有写过的,还有一些事自己添加的,而且确定错误 P49 倒数第九行 “print ("%e/n", toobig);” 应为 “printf ("%e/n", toobig);”,少个f。 P74 第十三行 “rintf ("num as int ...);” 应为 “printf ("num as int ...);”,少个p。 第三十一行 “第二行”应为“第三 阅读详情

相关推荐

C Primer Plus中文 第6版勘误

C Primer Plus中文第6版勘误表,之前在出版社官网免费下载的,但最近发现下架了,就从旧硬盘找出来,存在博客里。

weixin_56320000的博客 2014

C++ Primer》中文版(第五版)翻译勘误

C++ Primer》中文版(第五版)翻译勘误 在看《C++ Primer》中文版(第五版)时,我发现有许多说不通的地方,然后一翻英文版才发现是翻译错误,现在记录下来。

justitia00的博客 1887

c++primer中文版勘误

中文版的C++primer很多都在参考使用,其第四版有一些小错误如下

C++ Primer(第4版)》勘误

P52,应当是“如果 ri 不是 const,那么可以给 ri 赋一新值。这样做不会修改 dval,而是修改了 temp。期望对 ri 的赋值会修改 dval 的程序员会发现 dval 并没有被修改。仅允许 const 引用绑定到需要临时使用的值完全避免了这个问题,因为 const 引用是只读的。”

随便写写 983

C++ Primer勘误

P386 11.3.3 删除元素 第三行:erase操作不是返回void,而是返回被删除的元素的下一个元素的迭代器。 P296 倒数第三行最后,应该是“迭代器范围”,掉了一个围 转载于:https://www.cnblogs.com/buaakq/p/5614571.html...

ashan654301152的博客 207

C++ Primer Plus第六版勘误

如果Brass::ViewAcct()没有被声明为虚的,则在任何情况下都要调用Brass::ViewAcct()。

qq_45381268的博客 968

c++ primer 5th(中文版)勘误

\(P_{158}\) “末位大于 3” 改为 “末位大于等于 3” \(P_{302}\) \(P_{319}\) // 添加元素用光多余容量 while (ivec.size() != ivec.capacity()) ivec.push_back(0); // capacity 应该未改变,size 和 capacity 不相等 ... ... 将注释部分 “size ...

bangren3304的博客 1382

C++ Primer (第四版)勘误

转》C++ Primer (第四版)勘误 英文原版勘误: http://ptgmedia.pearsoncmg.com/images/9780201721485/Errata/Lippman_0201721481_Errata.html 博客内容转自:http://student.csdn.net/space.php?uid=130620&do=blog&id=21655

Stay hungry,stay foolish! 2056

C++ Primer 第四版笔记勘误

C++ Primer 第四版笔记勘误1 --------------------------------- 以下笔记按在书中出现的先后顺序来记载: P6  cout P7 一般出现空格符的地方都可以用换行符替代,只有两个例外:一是预处理指示中,二是字符串文字量中。

关注互联网安全的小虾米一枚 1422

C++ Primer中文版读书笔记

(注意,Lm 表示第 m 行,L-n 表示倒数第 n 行)■导读 p23原文:template T func( T p1, T p2, int p3 ) // ( T p1, T p2, int p3 ) 称为 template parameter list{     ...     }              // p1, p2 称为型别参数(type parameter)        

夜澜偶作庄周梦 酒后聊为楚客狂 3161

C++ Primer Notes(3): 哪些人可以看C++ Primer

在知乎搜索 “C++ Primer”,靠前的一个问答是。本篇挑选一些观点,予以批评。

baiyu33的博客 1061

C++ Primer, Fifth Edition - 下载电子书源代码

C++ Primer, Fifth Edition - 下载电子书源代码

程永强 4666

C++ Primer第五版勘误 持续更新

https://blog.csdn.net/abnerwang2014/article/details/20618531这篇文章是对 《C++ Primer 中文版第5版》 中错误的列举,会随着时间的推移持续更新1. P16:练习 1.19,“修改你为 1.4.1 节练习 1.10” 改为 “修改你为 1.4.1 节练习 1.11”2. P211.6 书店程序中,第5行的注释 // 保存下一条交...

杨氏计算机知识整理 2639

C++ Primer 中文版(第4版) 不完全勘误

勘误人: celeil 时间: 2006-05-07 10:27:00 页码: 6 行: -6~-5 错误: 将会导致程序错误推断崩溃位置。 更正: 将会导致错误推断程序的崩溃位置。 附言: 原文:Forgetting to do so may cause output to be left in the buffer if the program crashes, leading

ltolll的博客(技术版) 2742

c++ primer 勘误

C++ Primer Errata Last modified 10 June 2008 Every book has bugs in it, and C++ Primer is no exception. This page presents all the bugs that have come to our attention. All of these error...

weixin_34418883的博客 521

Primer】 阅读时发现的一些错误(第四版中文版)

看书的时候看到书上一些表达有问题,网上搜了下是作者之前就做了勘误的地方或者一些理解起来有问题的地方,在这里记下来 ^_^。(书是第四版中文版) 当然先发下英文勘误表的地址: http://ptgmedia.pearsoncmg.com/images/9780201721485/Errata/Lippman_0201721481_Errata.html --------------------...

weixin_30867015的博客 98
上一篇: typedef用法详解
下一篇: typedef的四个用途和两个陷阱
SearchLife
博客等级 码龄20年 51粉丝 22原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值