zoukankan      html  css  js  c++  java
  • Effective C++ 笔记1

    条款1:视C++为一个语言联邦

    1、C、Object-Oriented C++、Template C++ 、STL 组成了C++,高效编程取决你使用C++的哪一部分

    条款2:尽量用const ,enum,inline替换 #define

    1、Const 代替 #define中普通的宏,编译器会对类型进行检查避免类型错误。

    //如这里
    #define PI 3.1415
    //最好用const代替,一旦定义错了define只会对3.1415进行提示,而不会对PI进行提示,因为在预处理的时候PI已经被3.1415代替了
    Const double PI=3.1415

    2、inline 代替#define中形似函数的宏,同意可以避免宏定义错误

    //这样定义不安全
    #define CALL_WITH_MAX(a,b) f((a)>(b)?(a):(b))
    //采用inline
    template<typename T>
    inline T callWithMax(const T& a,const T& b)
    {
        return a>b?a:b;   
    }

    3、类中有const 必须要有static,有const就表示该属性是只有一份所以必须也是静态的

    Class C
    {
        static const int pi;    
    }

    4、如果不允许类中static初始化,那么用enum代替

    //旧的编译器不支持static在声明时获得初值
    Class C
    {
    private:
        static const double PI;
    };    
    const double C::PI=3.14159;
    //所以用这种方式来定义静态变量
    Class C
    {
    privateenum{num=5};
    };

    5、Ifdef/ifndrf 可以防止类被重复引用

    #ifdef _TEST_
    #define _TEST_
    
    int max(int a,int b);
    
    #endif

    条款3:尽量使用const

    1、Const出现在星号左边,被指物是常量。右边指针自身是常量

    char greeting[]="hello"
    //值常数
    const char* p=greeting;
    //指针常数
    char* const p =greeting;
    //指针和值都是常数
    const char* const p=greeting;

    2、Const定义迭代器错误,应该使用const_iteator

    std::vector<int> vec;
    
    const std::vector<int>::iterator it=vec.begin();
    *it=10;
    //错误 迭代器本身是常量
    ++it;
        
    
    std::vector<int>::const_iterator it=vec.begin()
    //错误,该迭代器指向的值是常量
    *it=10;
    ++it;

    3、函数返回 const 可避免无意义的赋值动作

    条款4:确定对象使用之前已先被初始化

    1、  永远在对象使用之前初始化

    2、  类中初始化不要用构造函数赋值的形式,要使用成员初值列

    class C
    {
        int a;
        int b;
        int c;
            //初始化队列 
        C(int x,int y)
            :a(x),
             b(y),
             c(1)
        {
        }
    };
  • 相关阅读:
    splice方法以及如何实现数组去重
    数组的几个重要方法以及如何清空数组
    for-in遍历
    浅谈json和数组的区别
    js实现查找替换关键字的效果
    js实现查找关键字效果
    原生js中大小写转化以及split分割字符串方法
    eclipse没有Web项目和Server选项
    【学习】005 线程池原理分析&锁的深度化
    什么是CPU密集型、IO密集型?
  • 原文地址:https://www.cnblogs.com/ssss429170331/p/5384007.html
Copyright © 2011-2022 走看看