初学者对C++程序设计语言(特别版Bjarne Stroustrup)学习疑问1-9章
1. 第5页:“标识符用的是比例宽度的字体”和“程序员已经习惯于采用等宽字体的代码”;问题:“比例宽度”和“等宽字体”是什么含义?
2. 第13页:“任何有关静态类型语言的经验对于学习C++也能有所帮助”;
问题:什么是静态类型语言?是否还存在动态类型语言?比如什么语言是动态类型的?
3. 第13页:“如果要符合C的连接规则,一个C++函数就必须被声明为具有C连接的。”
问题:什么叫具有C连接?具有C连接有何实际用处?如何声明为具有C连接?
4. 第14页:“一个程序常常能组织为一组类,或者一组类的有向无环图”;
问题:什么是有向无环图?这个概念术语来自哪一门课程?
5. 第16页:“不要在一个类里面放‘类型域’;采用虚函数。”
问题:什么是类型域?
6. 第19页:“……写出好程序的一种范型”中的“范型”;
问题:“范型”与“泛型”的含义和区别?
7. 第23页:“一集相关的过程与被它们所操作的数据组织在一起,通常被称做一个模块。”
问题:“一集”是什么含义?
8. 第65页:“典型的情况是有关字符集采用ISO-646的某个变形,例如ASCII”
问题:“什么是ISO-646”?它与ASCII有何异同?
9. 第66页:L’ab’中的L是什么?“放在引号间的字符个数及意义由实现根据wchar_t类型确定。”---这句话如何理解?
10. 第66页:“通过将变量声明为unsigned而保证某些值始终为正的企图常常会被隐含的类型转换规则破坏。”---这句话如何理解?
11. 第70页:“举例来说,对于enum e1{dark,light},在sizeof(int)==4的机器上,sizeof(e1)可以是1,也可能是4,但绝不会是8。”
问题:为什么可以是1,也可能是4,但绝不会是8?如何理解?
12. 第77页:“如果我们在所有需要可能较大的整数的地方都用int32,那么就很容易将我们的程序移植到一个sizeof(int)是2的机器上,因为只要在代码中重新定义int32的惟一一个出现typedef long int32。”
问题:为什么很容易?怎么理解很容易?
13. 第82页:“两个同样的字符串文字量是否被分配在一起,这一点由实现确定。”
问题:什么叫被分配在一起?实现如何确定?
14. 第83页:“在某些机器结构中,数组常常被分配在机器地址的边界上,所以‘数组开始元素之前的一个位置’根本就没有意义。”怎么理解?
15. 第88页:“可以通过对const指针的显示类型转换,明确要求去掉这种限制。”
问题:什么限制?
16. 第91页:“在那些为优化而使用的地方,可以将void*隐藏在类型安全的界面之后”
问题:什么是类型安全的界面?
17. 第91页:“到函数的指针和到成员的指针都不能赋给void*”
问题:为什么?
18. 第94页:“避免非平凡的指针算术”“避免在代码中使用非平凡的文字量”?
问题:什么是非平凡nontrivial?
19. 第98页:“对于一个应用于内部类型运算对象的二元运算符@,表达式x@=y的意思是x=x@y。”
问题:@是什么含义?
20. 第102页:“由于前面将运算符的Token_value值定义成该运算符的整数值(4.8节)”
问题:书中4.8节没有这个内容,此处何意?
21. 第103页:“让get_token()记录行的编号,将使error()能够通知用户出错的大致位置”
问题:get_token哪里记录了行的编号呢?
22. 第104页:页中部“expr(false)”
问题:expr是什么函数?false是什么作用?
23. 第106页:“对于不熟悉关联数组的程序员而言,采用标准库的map作为符号表似乎是一种作弊”问题:何为作弊?
24. 第107页:“(2.5.2节、第11章)”
问题:这个内容在书中哪里?第11章根本就没有这一节的编号。
25. 第107页:“表格中的类型识别typeid(type)和运行时类型识别typeid(expr)”
问题:这两者的含义区别?
26. 第107页:“表格中的类型的大小sizeor(type),补~expr,非(否定)!expr”的含义和用途?
27. 第108页:“表格中的建立(放置) new (expr-list) type和建立(放置并初始化) new (expr-list) type (expr-list)”什么含义,怎么用?
28. 第108页:“每个间隔里的运算符具有相同的优先级”,“间隔”是指什么?
29. 第109页:“错误:x++不是一个左值”,是否就是说x++无地址?
30. 第110页:“逗号表达式(v[i],i++)如何求值?”
31. 第110页:“if(i<=(0||max)<i),为什么是合法但却是一派胡言?”
32. 第112页:“请想一想将一个表示正在被处理的中断集的位向量,与另一个需要去处理的中断集的位向量相比较的问题”这句话是什么含义?
33. 第117页:“算术类型之间的缩窄转换(C.6节),从整数到枚举的转换(4.8节)和用户定义类型的对象构造(2.5.2节,10.2.3节)。”什么含义?
34. 第118页:“int()也就是写0的另一种方式。”什么是“写0”?此处为何意?
35. 第130页:“void f(const Large& arg){} 如果没有显示地做类型转换,arg的值就不能修改”什么含义?
36. 第131页:“允许对const T&参数进行转换,就保证了对这种参数所能提供的值集合,正好与通过一个临时量传递T参数的集合相同。”什么含义?
37. 第133页:“如果要写的模板函数的返回类型是模板参数,就很可能需要用这种东西。”怎么理解这句话?
38. 第135页:第一段文字如何理解?
39. 第135页:“使用声明或者使用指令”,什么含义?
40. 第138页:“编译器是没办法知道这些情况的。。。将能通过编译”,怎么理解?为什么能通过编译?
41. 第139页:“itoa”的函数原型是什么?
42. 第139页:“指向函数的指针”,没看懂。
43. 第140页:SIG_TYP signal(int, SIG_ARG_TYP)是什么含义?没看懂。
44. 第145页:“混乱”,如何混乱了?
45. 第146页:“在考虑使用指向函数的指针时,请考虑虚函数或模板是不是更好的选择”,为什么要做此考虑?
46. 第150页:“函数expr()必须首先声明而后再定义,以便能打开在6.1.1节所说的依赖性循环”什么是依赖性循环,6.1.1节哪里说了?
47. 第154页:如何理解“全局性的使用指令是一种完成转变的工具,在其他方面最好避免使用。在一个名字空间里的使用指令是一种名字空间的组合工具。在一个函数里(也只在这种地方),可以安全地将使用指令作为一种方便的记法方式。”这段话如何理解?
48. 第156页:“事情很清楚,Parser_interface的用户仅仅依赖于Parser::expr(),而且是间接的。”什么叫间接的?
49. 第159页:using namespace $$$,其中$$$是这个名字空间定义所在的作用域里具有惟一性的名字。特别地,在不同编译单位里的无名名字空间也互不相同。什么是不同编译单位?如果不同,那么其它还有哪些无名名字空间?
50. 第159页:“名字空间本身必须在作用域里”,含义?什么作用域?
51. 第166页:“不能通过名字空间的别名去重新打开那个名字空间”,什么是别名?什么是重新打开?
52. 第168页:setjmp和longjmp的含义和作用?
53. 第173页:“在导致错误的代码的同一个抽象层次上处理错误是非常危险的。”什么叫导致错误的代码的同一个抽象层次?
54. 第173页:“利用异常去松弛‘错误’处理代码和正常处理代码之间的联系”;“采用用户定义类型作为异常,不用内部类型”;“当局部控制结构足以应付问题时,不要用异常”;怎么理解?
55. 第177页:“为什么在C语言中这个f()调用不是错误?”
56. 第178页:怎么理解“在C,C++程序里,关键字static也被用于表示“使用内部连接”。请不要使用static,除了在函数和类的内部。”?
57. 第180,182页,有关“单一定义规则ODR”的理解?
58. 第182页,“与非C++代码的连接”没看懂。
59. 第193页,“动态连接库与具有复杂依赖关系的全局变量也无法很好地共存”怎么理解?
60. 第193页,“将一段C++代码作为某个非C++程序的一部分去执行”,如何执行?
61. 第194页,“最大数目”和“最大限制”为何意?
62. 第194页,“在有意向用于非C++程序组成部分的代码中,应避免需要运行时初始化的非局部对象”,怎么理解?