• Effective C++ 笔记(1)让自己习惯c++


    01、视C++为一个语言邦;

      (1)、C++仍是以C为基础;

      (2)、面向对象的C++,包括构造、析构函数,封装,继承,多态,虚函数等;

      (3)、泛型编程C++,关于Template

      (4)、STL

    02、尽量以const,enum,inline替换#define

      (1)、以const 替换#define

    GamePlayer.h
    
    class GamePlayer
    {
    public:
        GamePlayer();
        ~GamePlayer();
        static const int NumTurns = 5;//常量表达式
      //或enum {NumTurns = 5}; int scores[NumTurns]; //使用该常量 static const double FudgeFactor; //static class 常量声明,位于头文件内(double,float不支持在声明时直接初始化) }; GamePlayer.c const double GamePlayer::FudgeFactor //static class 常量定义,位于实现文件内

      (2)、以inline函数替换“宏函数”

    #define CALL_WITH_MAX(a, b) f((a)>(b)?(a):(b))
    int a = 5;
    int b = 0;
    CALL_WITH_MAX(++a, b);      //a被累加二次
    CALL_WITH_MAX(++a, b+10);   //a被累加一次!!
    
    template<typename T>
    inline void callWithMax(const T& a, const T& b)
    {
        f(a > b ? a : b);
    }
    

    03、尽可能使用const

      (1)、修饰普通变量 const int VAL = 20;  //使变量只读  

      (2)、修饰形参(以引用、指针传参时) char *strcpy(const char *srcStr, char *destStr);//该函数不会修改修改srcStr内容

      (3)、修饰返回值(返回值类型为引用、指针时), const Vec2& getPosition(); //该返回值不允许被修改

      (4)、修饰成员函数,该成员函数内部不会修改成员变量(非mutable修饰)

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

      (1)、为内置类型进行手动初始化

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

      (3)、用local static(函数内定义) 对象替换non_local static(全局,class内)对象(问题:对于“定义于不同的编译单元内的non-local static 对象”的初始化相对次序并无明确定义)

  • 相关阅读:
    Java 多线程之CyclicBarrier
    数据库事务隔离级别
    Java SE之Map接口
    (二)Shiro之一些重要的组件和工具类
    (一)Shiro之简介
    Datatables后端分页
    Spring之BeanFactory中Bean的生命周期
    Servlet之生命周期
    设计模式之单例设计模式
    day041 前端HTML CSS基本选择器(未整理完毕)
  • 原文地址:https://www.cnblogs.com/quehualin/p/9184333.html
Copyright © 2020-2023  润新知