《C++ Primer》学习笔记——第四章表达式

来源:互联网 发布:oracle12c容器数据库 编辑:程序博客网 时间:2024/05/16 17:11

1. 一般地表达式的结果是操作数的右值
2. 对于逻辑与操作符C++严格定义了子表达式的计算顺序如果左边的子表达式的值为false则不计算右边的子表达式
3. static_cast<desttype> ( value )称为显式类型转换explicit type conversion或强制类型转换cast,强制转换使编译器把一个对象或表达式从它当前的类型转换成程序员指定的类型。
4. 赋值操作符也可以被连接在一起只要每个被赋值的操作数都是相同的数据类型
5. int ival = jval = 0;只有当jval 在前面已经被定义而且是可被赋值为0 的某些类型时这个例子才是合法的
6. 我们可以用一个算术数据类型的值对复数初始化或赋值,但是相反的情形并不被自动支持,也就是说算术数据类型不能直接被一个复数类对象初始化或赋值。
7. 应用在指针类型上的sizeof 操作符返回的是包含该类型地址所需的内存长度但是应用在引用类型上的sizeof 操作符返回的是包含被引用对象所需的内存长度。
8. sizeof 操作符在编译时刻计算,因此被看作是常量表达。
9. 没有语法能为动态分配的数组的元素指定一个显式的初始值集合(在类对象数组的情况下如果我们定义了缺省构造函数那么它将被顺次应用在数组的每一个元素上)。
10. 所有从空闲存储区分配的对象都是未命名的,这是它的另一个特点,new 表达式并不返回实际被分配的对象,而是返回这个对象的地址,对象的所有操作都通过这个地址间接来完成。
11. delete [] pia;释放了pia 指向的10 个int对象的数组,并把相关的内存区返还给空闲存储区,在关键字delete 与指针之间的空方括号表示delete 的一种特殊语法,它释放由new 表达式分配的数组的存储区。
12. 逗号表达式是一系列由逗号分开的表达式,这些表达式从左向右计算,逗号表达式的结果是最右边表达式的值。
13. 在C 语言和标准C++之前用内置整值类型来表示位向量,典型的情况是用unsigned int,对象提供位的容器。标准库提供了一个bitset 类它支持位向量的类抽象bitset对象封装了位向量的语义,提供了一组用于管理位的设置复位和测试的操作。
14. bitset 有三种声明方式.在缺省定义中,我们只需简单地指明位向量的长度,例如bitset< 32 > bitvec;一种方法是为构造函数显式地提供一个无符号参数;我们还可以传递一个代表0 和1 的集合的字符串参数来构造bitset 对象。
15. 操作符具有优先级和结合性,赋值操作符是右结合的,算术操作符是左结合的。
16. 显式转换也被称为强制类型转换(cast),包括下列命名的强制类型转换操作符static_cast dynamic_cast const_cast 和reinterpret_cast

17. void*型指针不能直接被解除引用,因为没有类型信息可用来指导编译器怎样解释底层的位模式,相反void*的指针必须先被转换成某种特定类型的指针。
18. const_cast 正如其名字所暗示的将转换掉表达式的常量性(以及volatile 对象的volatile性);编译器隐式执行的任何类型转换都可以由static_cast 显式完成;reinterpre_cast 通常对于操作数的位模式执行一个比较低层次的重新解释,它的正确性很大程度上依赖于程序员的主动管理,使用括号进行强制类型转化效果与reinterpre_cast一样;dynamic_cast 支持在运行时刻识别由指针或引用指向的类对象。
20. 无论何时当我们面对令人费解的运行时刻程序行为时,可能的罪魁祸首首先会是具有功能障碍的指针,一种原因就是无效的显式强制转换,因此用reinterpret_cast 操作符来执行并标识出所有的显式指针强制转换是很有用的。 

原创粉丝点击