Effective C++ 读书笔记 条款一至三

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

记住,C++中的四种次语言..

1.C. c基础..

2.Object-Oriented C++ ,c++的主要,class ,类封装,继承,多态等.

3.Template C++ ..c++里头的泛型编程..模板编程.

4.STL.  标准模板库..如vector,queue,map等.


这个条款所叙述的..应当在次语言变换时候,高效编程守则也需要做出相应的改变策略..

 

例子: 

    对内置对象类型而言..使用 值传递 要比 引用传递  来的高效

    对于自定义类而言, 常引用传递往往更好..(const class& )

    STL 中而言.其是在C指针之上塑造,因此.值传递 也再次适用..

 

谨记: 对于C++高效编程原则应当视情况而定..取决使用C++中的那一部分

  • 条款2 尽量使用const enum inline 替换 #define 宏

请记住:

1.对于单纯常量,最好以const对象或enums 替换掉 #define..

如:  const double PI = 3.141592653

    class Test{

        static const double PI;    //声明式

    };

    const double Test::PI = 3.141592653;  //定义式,在实现文件.

2. 对于形似函数的宏..最好改用 inline 函数的形式 替换.

  • 条款3 尽可能的使用 const

谨记:

1.将某些东西声明为const 可帮助编译器侦测错误用法. const 可被施加于任何作用域的对象,函数参数.函数返回类型.成员函数本体.

 

如, 在C++里常用的 const 引用传值 就如常 const 指针一样.不以前函数修改其值.这就很好的保护了.参数的值不能被修改.

 

如. 定义成const 成员函数,在该成员函数里,是不允许修改成员变量的.因此这样一个接口往往可以启动保护数据的作用.

 

const 引用传值时候,只能调用.const 成员函数...

 

const 返回值 往往会作为接口时候,使得返回值不允许被外部修改.因此也是非常有用.

 

STL 当中的iterator..  const vector<int>::Iterator 表示 int * const   指针常量. 

vector<int>::const_Iterator 即 const int *  常量指针..

 

2. 编译器强制实施 bitwise constness. 但使用时候 应注意是概念上的常量.

 

mutable 将释放掉这种约束..即.这么定义.   mutable int size;

其定义的变量允许在const 成员函数中予以修改..

3.当const 和 non-const 成员函数 具有等价实现时候,,令non-const 函数 调用const 函数 可避免重复.

 

为什么不const 调用 non-const ..原因在于.const 需要保证不允许修改成员变量. 而调用non-const 成员函数.则存在可能已经修改了成员变量.因此这是一种不正确..

 

例子可入下所示:

 

[const_cast<T&>](static_cast<const T&>(*this) .function());   const_cast 视情况而定..如需要返回值去掉const属性则就需要了. static_cast<> 则进行一次强制转换成const 引用..

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值