• 《C++ Primer》笔记C++安全的泛型编程习惯


    我最终还是决定把这段话记下来,因为那些疑问也正是我的疑问。

    要点:

    1.C++ 程序员习惯于优先选用 != 而不是 < 来编写循环判断条件。 学习完本书第二部 分的泛型编程后,你将会明白这种习惯的合理性。

    2.在for语句的括号里直接调用size函数判断条件而不是在for循环之前把size的值保存下来(我之前一直习惯于把size保存这么做,因为会提高 效率)。

    在循环中加入新元素,使用size函数判断是不会发生错误的,而且还会把新加入的元素算在内。

    3.C++ 中有些函数可以声明为内联(inline)函 数。编译器遇到内联函数时就会直接扩展相应代码,而不是进行实际的 函数调用。 

     for (vector<int>::size_type ix = 0; ix != ivec.size(); ++ix)
    

                      ivec[ix] = 0; 

    关键概念:安全的泛型编程

        习惯于 C 或 Java 编程的 C++ 程序员可能会觉得难以理解,for 循环 的判断条件用 != 而不是用 < 来测试 vector 下标值是否越界。C 程序 员难以理解的还有,上例中没有在 for 循环之前就调用 size 成员函数 并保存其返回的值,而是在 for 语句头中调用 size 成员函数。

    C++ 程序员习惯于优先选用 != 而不是 < 来编写循环判断条件。在上例 中,选用或不用某种操作符并没有特别的取舍理由。学习完本书第二部 分的泛型编程后,你将会明白这种习惯的合理性。

    调用 size 成员函数而不保存它返回的值,在这个例子中同样不是必需 的,但这反映了一种良好的编程习惯。在 C++ 中,有些数据结构(如 vector)可以动态增长。上例中循环仅需要读取元素,而不需要增加新 的元素。但是,循环可以容易地增加新元素,如果确实增加了新元素的 话,那么测试已保存的 size 值作为循环的结束条件就会有问题,因为 没有将新加入的元素计算在内。所以我们倾向于在每次循环中测试 size 的当前值,而不是在进入循环前,存储 size 值的副本。

    我们将在第七章学习到,C++ 中有些函数可以声明为内联(inline)函 数。编译器遇到内联函数时就会直接扩展相应代码,而不是进行实际的 函数调用。像 size 这样的小库函数几乎都定义为内联函数,所以每次 循环过程中调用它的运行时代价是比较小的。 

  • 相关阅读:
    迷宫最短路问题
    回溯算法
    解题报告:poj1321 棋盘问题
    矩阵、分数、点、线类
    判断图像中有多少行文本(开发中)
    图形-回行扫描函数
    贝叶斯分类器
    js解析数学运算公式
    用postcss给less加上webkit前缀
    node创建文件夹
  • 原文地址:https://www.cnblogs.com/worldtraveler/p/2835826.html
Copyright © 2020-2023  润新知