[C++] effective_C++_条款03

条款03:尽可能使用const

  • 修饰变量,使其不可改变

    const int var = 3;

    此时var的值就不能改变了,因为这个特性,所以在声明的时候就要初始化,这样是不行的:

    const int var;
  • 修饰指针

    可分为两种情况,指向常量的指针和常量指针

    const int* p = &a;
  • 修饰迭代器

    C++的STL中既有vector<T>::iterator,也有vector<T>::const_iterator,而vector<T>::const_iterator即表示指向常量的迭代器,而另一种形式const vector<T>::iterator则表示这个迭代器的指向不可改变,即常量迭代器

  • 修饰类的成员函数

    • 有无const是可以构成成员函数的重载的

    • 如果某个类中有一个指针,如果在某个函数中确实改动了p所指向的内容,那么最好就不要加上const,反过来,如果加上了const就不要改变成员变量,包括它所指向的值

    • const成员函数和非const成员函数中避免重复

    有没有加const是构成函数重载的,但通常这种重载的相似度很高:

    class TestBlock {
    private:
        string text;
    public:
        ...
        const char& operator[](size_t position) const {
            ...
            return text[position];
        }
        char& operator[](size_t position) {
            ...
            return text[position];
        }
    }

    一个好的方法就是在非const版本的成员函数中调用const版本的成员函数:

    char& operator[](size_t position) {
        return const_cast<char&>(static_cast<const TestBlock&>              (*this)[position]);
    }

    正如上面代码所示,进行了两次转换,一次是把非const对象转成const对象,使用static_cast<const TestBlock&>,另一次是在返回值时,将const char&通过const_cast<char&>转换成char&

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值