《Effective C++》读后总结(三)尽量使用const
来源:互联网 发布:访问服务器8080端口 编辑:程序博客网 时间:2024/06/06 05:55
1.将某些东西声明为const可以帮助编译器侦测出错误用法。const可被施加于任何作用域内的对象,函数参数,函数返回类型,成员函数本体。
class Rational {.....}const Rational operator* (const Rational &lhs, const Rational rhs);
使用const的好处在于可以防止以下情况
if(a * b = c) //比较动作误写成赋值动作时编译器会报错
2 .编译器强制实施bitwise constness,但你编写程序时应该使用“概念上的常量性”
class CTextBlock{public: ... size_t length() const;private: char * pText; mutable size_t textlength; //mutlab修饰的成员总是被允许修改的 mutable bool lengthIsValid;};size_t CTextBlock::length() const{`这里写代码片` if(!lengthIsvalid){ textLength = strlen(pText); lengthIsvalid = true } return textLength;}
上述代码中length()的实现显然不是bitwise const,因为textLength,lengthIsvalid都可能被更改。mutable也是为了突破const的限制而设置的。被mutable修饰的变量,将永远处于可变的状态,即使在一个const函数中。因此mutable能够使得编译通过。
3.当const和non-const成员函数有着实质等价实现时,令non-const版本调用const版本避免代码重复
class TextBlock{public: .... const char &operator[](size_t position) const { ..... ..... return text[postion]; } char& operator[](size_t position) { return const_cast<char&>(static_cast<const TextBlock&>(*this)[position]); } ....};
static_cast <const TextBlock&> (*this)[position])
第一次转型,TextBlock&转型为const TextBlock&。 const_cast<char&>(expression)
第二次转型,将const TextBlock&中的const移除
注意:不能令const版本调用non-const版本避免代码重复,因为const成员函数承若不改变对象,而non-const成员函数可能会改变对象,因此在const成员函数中调用non-const成员函数可能会改变对象,使得编译不通过
阅读全文
0 0
- 《Effective C++》读后总结(三)尽量使用const
- 《Effective C++》读后总结(二)尽量以const,enum,inline替换#define
- effective C++读书笔记(三)尽量使用const
- Effective C++解析 Item3:尽量使用const
- Effective C++(一)尽量使用const和inline来替代#define
- const深度总结(effective C++)
- 《Effective C++》尽量以const,enum,inline,替换#define
- effective C++:尽量以const、enum、inline替换#define
- 《Effective C++》:尽量用const和inline取代#define(1)
- Effective C++解析 Item3:尽量使用const (补充)物理的与逻辑的常量性
- 【Effective C++ 读书笔记】条款03: 尽量使用 const
- 【Effective C++】const的使用
- Effective Objective-C 2.0 总结(三)
- Effective C++--条款02:尽量以const,enum,inline替换#define(以编译器替换预处理器)
- effective C++ 读后感(三) 尽可能使用const
- 《Effective Modern C++》读书笔记(5) -- 尽量使用nullptr而不使用0和NULL
- 《Effective C++》关于const,define等总结
- 尽量使用const
- KD树的C++实现
- sqlalchemy数据操作
- GUI编程——Tkinter、pyinstaller
- [二分 树形DP] CEOI2017. Mousetrap
- 深入理解不同的二分查找C++
- 《Effective C++》读后总结(三)尽量使用const
- Mac 中 Homebrew 的一些使用笔记
- 【整体二分+树状数组区间加区间和】BZOJ3110 [Zjoi2013]K大数查询
- 用龙芯1c库在裸机编程环境中实现硬件定时器中断
- 第十课、C运算符
- [转载自宋博士博客]如何在ANSYS WORKBENCH中进行多载荷步的静力分析?
- 如何在Windows上编译64位QT
- String使用equals方法和==分别比较的是什么?
- 如何更快地构建与渲染