C++读书笔记

来源:互联网 发布:网络url地址是什么 编辑:程序博客网 时间:2024/05/17 13:45

C陷阱和缺陷

1.赋值符优先级比逻辑比较低,赋值表达式的结果为赋值后的结果

2.编译器扫描符号使用贪心法,尽量选择最长字符的符号串,如a---理解为a -- -而不是a - --

3.为兼容老版本编译器,不同符号之间最好加空格,如a=-1可能理解为a =- 1,应该改为a = -1

4.老版本编译器,8进制数以0开始,后面可以加超过8的数字,新版本会在编译时提示出错

5.单引号中放多个字符,赋值给一个单字符变量,只会取第一个字符,赋值给一个多字节变量,会将这些字符相加成一个大的整数,如char a='dd',a为’d',而int a='dd',a为'd'*2的8次方加'd'

6.() 结合性高于*

7.理解声明,声明符号的整体为声明的类型,以此推导出声明符号的类型,如float *g(),*g()整体为float型,推导出g为返回float*的函数

8.声明的类型转换,即把声明符号去掉,再整体加括号,如float *g(), g的类型为(float *())

9.添加括号可以解决运算符优先级问题,但是不易理解,所以记住算符优先级是有好处的

10 任何一个逻辑运算符的优先级低于任何一个关系运算符

11.移位运算符的优先级比算术运算符要低,但是比关系运算符要高

12.如果一个程序中包括语句:extern int a; 那么程序就必须在别的某个地方包括:int a;

13.static修改变量或函数,限制作用域为一个源文件内

14, char str[]和char* str的区别,前者本身为第一个元素的地址,后面的内容指向第一个元素的地址

15.外部符号(能够被链接器发现的符号),应当放在头文件中声明,在源文件中定义

16.数组类型作为参数传递给函数,无论形参定义为数组类型func(int list[])还是指针类型(func(int* list),都被退化为指针类型,即sizeof大小为指针大小,而不是数组长度

17.函数重载是C++新增特性,C语言不支持同名函数

18. typedef定义函数指针类型与函数类型,typedef void(TYPE)(), typedef void(*TYPE)();前者定义的变量即为声明变量,不能赋值函数,后者可以赋值为相同签名相同返回类型的函数指针


effective C++

1. C++四个次语言:C, OO, Template, STL

2.类内部static变量,都需要在类外进行定义,除整型变量可以直接在类中赋值,其它需要在定义中赋值

3.enum hack:利用enum中的符号作为整数值,给数组定义大小

4.单纯常量 ,最好以const对象或enum代替,形似函数的宏最好改用inline

5.const成员函数提供操作const对象的方法


避免模板膨胀:把模板无关的东西用继承的方式剥离到父类,确保模板的代码都是和模板参数相关的

0 0
原创粉丝点击