zoukankan      html  css  js  c++  java
  • 《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吧,而且,书上也建议,不要常用强制转换,如果程序写得好的话,就根本不用用上这个功能。

  • 相关阅读:
    填空:类型转换1
    :其他基本数据类型存储空间大小
    10:Hello, World!的大小
    09:整型与布尔型的转换
    08:打印字符
    07:打印ASCII码
    06:浮点数向零舍入
    05:填空:类型转换2
    04:填空:类型转换1
    03:其他基本数据类型存储空间大小
  • 原文地址:https://www.cnblogs.com/robbychan/p/3787184.html
Copyright © 2011-2022 走看看