Effective C++ 阅读笔记(1)

  1. 关键字 explicit
    用于告知编译器,该构造函数可以用于完成隐式类型转换(implicit type conversation)!
    建议:除非有一个很好的理由,否则将构造函数申明为 explicit!

  1. C++是一个由多个次语言组成的语言联邦
    c 风格
    面向对象的c
    泛型C++
    STL-C++
    不同的次语言尤其各自的编程守则,以传递参数为例,若编写c风格的c++, 传值比传递引用更高效,而在面向对象的c与泛型编程中 const reference更安全可靠,到了STL_C++又回归传值更高,这与次语言本身的程序设计范式与实现方式有关。

  1. 尽量用enum,inline和const来代替define(用编译器代替预处理)
//the enum hack:
     class myClass{
    privat:
        enum {Turns = 6};
        int array[Turns];
    };

  1. 尽量使用const,只要不违反设计需求
    对于const成员函数,const表明该函数可以“操作const对象”!!!而c++中,const常量性不同的两个函数可以完成重载!!!
const char print( const myString cstr) const
    {
        return cstr[0];
    }
  • mutable 解除const的限制
// 对于类成员函数,避免const版本与非const版本重复的技巧:
// 让非const成员函数在内部调用cosnt函数
class TextBlock
{
public:
    // --- constructor 
    // -- deconstructor
    const char& operator[](std::size_t pos) const // const version
    {
        // -- operation is omitted
    }
    char& operator[](std::size_t pos ) // non-const version
    {
        return   // call const function & return the result 
            const_cast<char&>(
            static_cast<const TextBlock&>(*this)[position]
        );
        // please pay attention to the type conversion!!!
    }
};

  1. 确定对象被使用前已经被初始化
    -对于无成员的内置类型,在声明时手工完成初始化
    -对自定义类类型,使用初始化列表(member initialization lists)进行初始化!确保构造函数对每一个成员变量进行初始化(即使是无参的default构造函数,也可以使用无物的初始化列表) -> 解决引用类型、const类型的初始化问题!!!
    -利用单例模式(singleton pattern)的设计方法,解决non-local static实例的初始化问题
myClass::myClass
    :theName(),theAdreee(),theNum()
    {};
  1. 6.

2016.10.21 待续

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值