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对象.

  • 相关阅读:
    阅读笔记7
    阅读笔记6
    架构阅读笔记5
    软件质量属性——易用性课堂讨论问题总结
    Git 的 .gitignore 配置
    zookeeper的简单搭建,java使用zk的例子和一些坑
    MySQL中有关TIMESTAMP和DATETIME的对比
    Mysql 如何设置字段自动获取当前时间,附带添加字段和修改字段的例子
    spring boot注入error,Consider defining a bean of type 'xxx' in your configuration问题解决方案
    net start命令发生系统错误5和错误1058的解决方法
  • 原文地址:https://www.cnblogs.com/o-v-o/p/10156522.html
Copyright © 2011-2022 走看看