《C++ Primer》 第05章 【表达式】

第五节:自增和自减操作符
@ 学习摘录050:自增和自减操作符
——建议:只有在必要时才使用后置操作符。
——前置操作需要做的工作更少,只需加1后返回加1后的结果即可。
——而后置操作符则必须先保存操作数原来的值,以便返回未加1之前的值作为操作的结果。
——对于int型对象和指针,编译器可优化掉这项额外工作。但是对于更多的复杂迭代器类型,这种额外工作可能花费更大的代价。
——养成使用前置操作这个好习惯,就不必操心性能差异的问题。 *****
@ 学习摘录051:在单个表达式中组合使用解引用和自增操作
——*iter++的意思:等效于*(iter++)。子表达式iter++使iter加1,然后返回iter原值的副本作为该表达式的结果。
vector<int>::iterator iter = ivec.begin();
// prints 10 9 8 … 1
while(iter != ivec.end())
  cout << *iter++ << endl;  // iterator postfix increment
摘录有想:
——很多C++程序员都会习惯用这种方法的,可以简洁清晰不冗长。Good !
第十一节:new 和delete 表达式
@ 学习摘录052:动态创建对象的默认初始化
——在动态创建对象时,(几乎)总是对它做初始化也是一个好方法。
——同样也可以对动态创建的对象做值初始化
string *ps = new string();  // initialized to empty string
int *pi = new int();  // pi points to an int value-initialized to 0
cls *pc = new cls();  // pc points to a value-initialized object of type cls
——对比下面的不同初始化方式的不同
int *pi = new int;  // pi points to an uninitialized int
int *pi = new int();  // pi points to an int value-initialized to 0      Good !
@ 学习摘录053:
——一旦删除了指针所指向的对象,立即将指针置为0,这样就非常清楚地表明指针不再指向任何对象。
摘录有想:
——如果用了delete *p; 之后 p = NULL;   Good !
第十二节:显式转换
@ 学习摘录054:
——命名的强制类型转换 cast-name<type>(expression);
——dynamic_cast,支持运行时识别指针或引用指向的对象。
——const_cast,将转换掉表达式的const性质。
——static_cast,编译器隐式执行的任何类型转换都可以由static_cast显式完成。
——reinterpret_cast,通常为操作数的位模式提供较低层次的重新解释。
摘录有想:
——我想一般现在写程序的时候用到最多的是static_cast吧,而且,书上也建议,不要常用强制转换,如果程序写得好的话,就根本不用用上这个功能。

原文地址:https://www.cnblogs.com/robbychan/p/3787184.html