Effective C++(改善编程的55种做法)第二节
来源:互联网 发布:平果怎吗删软件 编辑:程序博客网 时间:2024/05/17 21:21
Use const whenever possible
1.加上const的限制之后,可以预防一些不必要的改动,并且这种检查操作都是编译器做的。
2.分清楚const int *p 和 int * const p的区别:
const int *p 表示p指向的数据是常量不能更改
int * const p表示p是个常指针不能改变它指向的对象。
另外在函数声明当中 void f1(const Widget *p)和void f2(Widget const *p),这两个函数的p其实是一个东西(注意*号的位置)
3.在STL iterator方面,
cosnt std::vector<int>::iterator it1; //it1的指向不能改变,也就是说it不能用来进行遍历操作
std::vector<int>::const_iterator it2; //ite2所指向的数据不能改变
4.在函数方面来说,const可以用在返回值,调用参数和子函数中。将函数的返回值定义为const可以预防一些偶然的错误。
class Rational{...};
const Rational operator*(const Rational& lhs, const Rational& rhs);
将这个重载(overload)标志符函数的返回值定义为const的好处是:
Rational a,b,c;
...
(a*b)=c; //!!将c赋值给两个数相乘的值,本身就是无意义的
当我们偶然的进行了上面的操作的时候,其实上面的操作本身是没意义的,而且我们也没想这样操作,但如果发生逻辑错误了,我们可能会检查不出来。但如果将重载函数的返回值定义为const,编译器将会帮我们检查出上面的逻辑错误。
5.定义const member function的好处:
-可以将interface简单化,这样我们会知道哪个函数会改值,而哪个函数不会改值
-只有const memeber function可以和const object结合使用
-const 的限制还可以让我们重载函数 例如:
class TextBlock
{
public:
...
const char & operator[](std::size_t position) const
{ return text[position]; }
char& operator[](std::size_t position)
{ return text[position]; }
private:
std::string text;
};
void main()
{
TextBlock tb("Hello");
std::cout<<tb[1];
tb[3]='x';
}
6.当我们定义的const member function有可能要改变类里面某些变量的值的时候,我们需要将那些变量设成mutable例如:
mutable x;
7.总结
-const 可以帮助编译器检查错误,防止程序中一些不必要的问题
-编译器只能实现bitwise的 常量化(constness),但我们也要保证我们的程序在逻辑上也是常量化的
-如果我们const和non-const的子函数有相同的操作的话,women可以通过non-const版本的函数来调用const版本的函数来避免code duplication
- Effective C++(改善编程的55种做法)第二节
- Effective C++(改善编程的55种做法)第一节
- 《Effective C#:改善C#程序的50种方法》读书笔记
- 《More Effective C++:35个改善编程与设计的有效方法》(中文版)
- 《Effective C++ 改善程序与设计的55个具体做法》——第二章笔记
- 《More Effective C++ 35个改善编程与设计的有效方法》——第二章笔记
- 指针与引用的区别-----读书笔记:More Effective C++:35个改善编程与设计的有效方法
- Effective C++:改善程序与设计的55个具体做法:第3版 评注者序
- 中文版《Effective C++:改善程序与设计的55个具体做法
- 《Effective C++》读书笔记(第二部分)
- C++ 改善程序与设计的做法
- Effective C++ 改善程序设计的55个具体做法(一)
- Effective C++改善程序与设计的55个具体做法
- Effective C# 中文版改善C#程序的50种方法
- Effective C# --改善C#程序的50种方法 摘要
- Effective C# 中文版:改善C#程序的50种方法
- Effective C#中文版:改善C#程序的50种方法
- Effective C#中文版:改善C#程序的50种方法
- fatal error LNK1103: debugging information corrupt; recompile module
- 关于pthread_cond_timedwait这个方法以及有关时间结构
- win32多线程 - 汉诺塔动画 .
- js hashmap
- ubuntu kernel update
- Effective C++(改善编程的55种做法)第二节
- 我们分手吧!
- MFC双缓冲解决图象闪烁
- 苹果“教主”乔布斯:一个人的世界
- 项目管理学习笔记之五质量管理过程总结
- NET 二进制形式的文件的存储与读取
- 项目管理学习笔记之六人力资源管理过程总结
- android 浏览器插件开发 - 流程(2)
- 生命的格子