《Effective c++》Chapter1 读书笔记

Chapter1

条款01:视c++ 为一个语言联邦
  • C++可以分为四个次语言:
    • C语言
    • Object-Oriented C++(C with class)
    • Template C++(范型编程)
    • STL(标准模板库)
条款02:尽量以const,enum,inline替换#define
  • 对于单纯常量,最好以const对象或者enums替换#fefine
  • 对于形似函数的宏,最好改用inline函数替换#define
条款03:尽量可能使用const
  • 指向常量的指针有两种书写格式:
    1. const typename * p
    2. typename const * p
  • 两个成员函数如果只是常量性不同,可以被重载
  • 对于const,C++遵循bitwise constness
    • 漏洞:对于一个更改了“指针所指物”的成员函数虽然不能算是const,但如果只有指针(而非其所指物) 隶属于对象,那么称此函数为bitwise const不会引发编译器异议(但不适当)。
  • constnon-const成员函数中避免重复:non-const函数调用const函数(见下面的例子)
class TextBlock{
    public:
    ...
    const char& operator[](std::size_t position) const
    {
        ...
        return text[position];
    }
    ..
    char& operator[](std::size_t position)
    {
        return const_cast<char&>(
            static_cast<const TextBlock&>(*this)[position];
        )
    }
};
条款04:确定对象被使用前已先被初始化
  • 使用未初始化的对象可能导致程序出现未定义行为,为避免出现这种情况,需要做三件事:
    1. 手工初始化内置型non-member对象
    2. 使用成员初值列(member initialization list)对付对象的所有成分,比直接赋值效率更高
    3. 在“初始化次序不确定”(比如不同编译单元所定义的non-local static)氛围下加强设计(见下面的例子)
//使用reference-return local static对象避免初始化次序不确定造成的错误

//test1.cpp
class FileSystem{
    ...
};
FileSystem tfs(){
    static FileSystem fs;
    return fs;
}

//test2.cpp
class Directory{
    ...
    std::size_t disks=tfs.numDisks();
};
Directory& tempDir(){
    static Directory td;
    return td;
}
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值