zoukankan      html  css  js  c++  java
  • 一.让自己习惯c++

    让自己习惯C++

    01.视c++为一个语言联邦

    • C

    • Object-Oriented C++

    • Template C++

    • STL

      C++ 高效编程守则视状况而变化,取决于你使用C++的哪个部分

    02.尽量以const, enum, inline 替换#define (以编译器替换预处理器)

    • 对于单纯常量,最好以const对象或是enums替换#defines
    • 对于形似函数的宏(macros), 最好改用inline函数替换#defines

    03.尽可能使用const

    • 如果关键字const 出现在星号左边,表示被值物为常量;如果出现在星号右边,表示指针自身是常量;如果出现在星号两边,表示被指物和指针两者都是常量.

      • 如果被指物是常量,可以将const写在类型前面,亦可以写在类型之后,星号之前.

        void f1(const Widget* pw);
        void f2(Widget const * pw);  // 函数获得一个指针,指向一个常量的Widget对象
        
      • STL迭代器的作用就像个T*指针,声明迭代器为const就像声明指针为const一样(即声明一个T * const 指针),表示这个迭代器不得指向不同的东西,但他指向的值是可以改动的.

        std::vector<int> vec;                                
        const std::vector<int>::iterator iter=vec.begin();   // iter的作用就像T* const
        *iter = 10;                                          // 没问题,改变iter所指物
        ++iter;                            // 错误,iter是const
        
      • 如果希望迭代器所指的东西不可被改动(const T*), 需要的是const_iterator:

      • std::vector<int>::const_iterator cIter = vec.begin(); // cIter的作用像个const T*
        *cIter = 10;                                          // 错误,*cIter是const
        ++cIter;                                              // 没问题,改变cIter.
        

        **注意: **

        • 将某些东西声明为const可帮助编译器侦测出错误用法.const可被施加于任何作用域内的对象,函数参数,函数返回类型,成员函数本体.
        • 编译器强制实施bitwise constness, 但你编写程序时应该使用"概念上的常量性"
        • 当const和non-const成员函数有着实质等价的实现时,令non-const版本调用const版本可避免代码重复.

      04.确定对象被使用前已先被初始化

      • 永远在使用对象之前先将它初始化,对于无任何成员的内置类型,你必须手动完成此事.

        int x = 0;
        const char* text = "A C-style string";
        
        double d;
        std::cin >> d;
        
      • 对于内置类型意外的任何其他东西,初始化的责任落在构造函数身上.规则很简单:确保每一个构造函数都将对象的每一个成员初始化.

      • **注意: **

        • 为内置型对象进行手工初始化,因为C++不保证初始化它们.

        • 构造函数最好使用成员初值列表,而不要在构造函数本体内使用赋值操作.初值列列出的成员变量,其排列次序应该和它们在class中的声明次序相同.

        • 为免除"跨编译单元值初始化次序"问题,请以local static对象替换non-local static对象.

  • 相关阅读:
    LeetCode(111) Minimum Depth of Binary Tree
    LeetCode(108) Convert Sorted Array to Binary Search Tree
    LeetCode(106) Construct Binary Tree from Inorder and Postorder Traversal
    LeetCode(105) Construct Binary Tree from Preorder and Inorder Traversal
    LeetCode(99) Recover Binary Search Tree
    【Android】通过经纬度查询城市信息
    【Android】自定义View
    【OpenStack Cinder】Cinder安装时遇到的一些坑
    【积淀】半夜突然有点想法
    【Android】 HttpClient 发送REST请求
  • 原文地址:https://www.cnblogs.com/o-v-o/p/10156522.html
Copyright © 2011-2022 走看看