C++ primer第二次阅读学习笔记(第5章)
2012-05-16 20:30
232 查看
第五章
对于两个数的除法和求模,若均为正,则结果均为正。若均为负,除法结果为正,取模的结果为负。若一正一负,则结果依赖于具体编译器。之所以不能串联使用关系操作符如if(i<j<k),因为关系操作符具有左结合特性。i<j首先比较,比较的结果为0或1,然后在与k进行比较,只要k>=1,结果恒为真。
对于判断与bool值相等与否,一般都是判断非假,if(val!=false),或是写成if(val),因为val可能是int或是相关类型,如果使用if(val==true),此时只有当val==1时才成立,而对于int类型来说非零即为真,0为假。
前置自增自减运算符效率较后置自增自减运算符较高。因为前置运算符只需加一或减一后返回结果,而后置运算符必须先保存原来的值,再加一或减一。
对于cout<<*iter++,很容易让人疑惑。它等同于*(iter++),因为自增运算符优先级高于解引用操作,且它们都是从右向左结合。此句也相当于cout<<*iter;iter++;因为iter++自增后,返回原值的副本,然后在解引用此值。
条件操作符的优先级相当低,应该注意使用括号。如cout<<(i<j?i:j);如果写成cout<<i<j?i:j;它将i和j的值相比较后的值视为cout的操作数,输出0或1,<<操作符返回cout值,然后将返回结果作为条件操作符的判断条件。
对于内置的类型,动态申请空间如int*p=new int:与int*p=new int(),有显著的差别,第一种情况int变量没有被初始化,第二种被初始化为0。对于类类型,第一种写法与第二种写法没有显著差别,类的默认构造函数都会被调用。
堆空间可能会被耗尽,因此动态申请内存可能会失败。动态内存交换并不能保证堆空间随用随有。
delete动态申请的空间之后要将指针置为NULL,否则将变成野指针。有可能被误用。两次对同一块堆空间调用delete可能会导致堆空间被破坏。
const_cast用于去掉表达式const性质。如const char *ptr;char *p=const_cast<char*>(ptr);去除了ptr的const属性。
static_cast,编译器隐式执行的任何类型转换都可以由static_cast显式完成。用于基本数据类型之间的转换,如把int转换成char,把int转换成enum。这种转换的安全性也要开发人员来保证。把空指针转换成目标类型的空指针。把任何类型的表达式转换成void类型。
旧式的强制转换符号有两种形式,如int(ptr),或(int)ptr;但这是c语言的强制类型转换,虽然C++支持,但是推荐使用C++中的强转操作符。
相关文章推荐
- C++ primer第二次阅读学习笔记(第16章:模板与泛型编程) .
- C++ primer第二次阅读学习笔记(第17章:用于大型程序的工具:命名空间)
- 《C++ Primer Plus》第5章 循环和关系表达式 学习笔记
- C++ Primer Plus 学习笔记(第八章)
- The C++ Programming Language 学习笔记 第5章 指针、数组和结构
- 《C++ Primer Plus》16.3 标准模板库 学习笔记
- c++学习笔记--C++Primer第4版--迭代器iterator
- 【学习笔记】C++primer plus 10. 11. 12. 对象
- 2012/1/22 《C++ Primer Plus》第十章:对象和类 学习笔记
- C++ Primer 学习笔记_45_STL实践与分析(19)--泛型算法的结构
- C++ Primer 学习笔记——顺序容器的string操作
- <C++Primer>第四版 阅读笔记 第三部分 “类和数据抽象”
- C++ Primer plus 学习笔记之 数组、array和vector异同点
- c++ primer plus阅读笔记12---手动调用析构函数
- C++ Primer plus 学习笔记之第七章(2)函数指针
- C++ primer plus 学习笔记
- c++ primer plus阅读笔记2---结构体共用体枚举
- 《C++ Primer Plus》第12章 类和动态内存分配 学习笔记
- c++ primer plus阅读笔记4---struct
- C++ Primer Plus第九章学习笔记