effective c++ 条款03 整理

尽可能使用const

(1)const约束指针、迭代器

const char* p = "adc"; //non-const pointer,const data char* const p = "abc"; //const pointer,non-const data const char* const p = "abc";//const pointer,const data const std::vector::iterator it = vec.begin();//(it的类型为 T* const)const pointer std::vector::const_iterator it = vec.begin();//const data

(2)const约束函数形参

void a(const T b);//保护形参不被修改 void a(const T* b);//const pointer void a(const T& b);//const reference

另外只有引用的const传递可以传递一个临时对象,因为临时对象都是const属性, 且是不可见的,他短时间存在一个局部域中,所以不能使用指针,只有引用的const传递能够捕捉到这个家伙

(3)const约束函数返回

const T fun1();//这个其实无意义,因为参数返回本身就是赋值。 const T* fun2();//调用时 const T *pValue = fun2(); //我们可以把fun2()看作成一个变量,即指针内容不可变。 T* const fun3(); //调用时 T* const pValue = fun2(); //我们可以把fun2()看作成一个变量,即指针本身不可变。 //引用类似

一般情况下,函数的返回值为某个对象时,如果将其声明为const时,多用于操作符的重载。通常,不建议用const修饰函数的返回值类型为某个对象或对某个对象引用的情况。原因如下:如果返回值为某个对象为const(const A test = A 实例)或某个对象的引用为const(const A& test = A实例) ,则返回值具有const属性,则返回实例只能访问类A中的公有(保护)数据成员和const成员函数,并且不允许对其进行赋值操作,这在一般情况下很少用到。

(4)const约束类

(1)const修饰成员变量 const修饰类的成员函数,表示成员常量,不能被修改,同时它只能在初始化列表中赋值。 class A { … const int nValue; //成员常量不能被修改 … A(int x): nValue(x) { } ; //只能在初始化列表中赋值 } (2)const修饰成员函数 const修饰类的成员函数,则该成员函数不能修改类中任何非const成员函数。一般写在函数的最后来修饰。 class A { … void function()const; //常成员函数, 它不改变对象的成员变量. //也不能调用类中任何非const成员函数。 } 对于const类对象/指针/引用,只能调用类的const成员函数,因此,const修饰成员函数的最重要作用就是限制对于const对象的使用。 a. const成员函数不被允许修改它所在对象的任何一个数据成员。 b. const成员函数能够访问对象的const成员,而其他成员函数不可以。 (3)const修饰类对象/对象指针/对象引用 · const修饰类对象表示该对象为常量对象,其中的任何成员都不能被修改。对于对象指针和对象引用也是一样。 · const修饰的对象,该对象的任何非const成员函数都不能被调用,因为任何非const成员函数会有修改成员变量的企图。 例如: class AAA { void func1(); void func2() const; } const AAA aObj; aObj.func1(); × aObj.func2(); 正确 const AAA* aObj = new AAA(); aObj-> func1(); × aObj-> func2(); 正确

(5)使用const的一些建议

要大胆的使用const,这将给你带来无尽的益处,但前提是你必须搞清楚原委;

要避免最一般的赋值操作错误,如将const变量赋值,具体可见思考题;

在参数中使用const应该使用引用或指针,而不是一般的对象实例,原因同上;

const在成员函数中的三种用法(参数、返回值、函数)要很好的使用;

形参为指针或者引用时最好使用const,避免形参为常量不能使用

不要轻易的将函数的返回值类型定为const;

除了重载操作符外一般不要将返回值类型定为对某个对象的const引用;

任何不会修改数据成员的函数都应该声明为const 类型。

点击复制链接 与好友分享!回本站首页
您对本文章有什么意见或着疑问吗?请到论坛讨论您的关注和建议是我们前行的参考和动力
上一篇:POJ1191——棋盘分割
下一篇:leetcode Binary Tree Level Order Traversal
相关文章

条款23宁以non-member函数代替member函

Effective C++ 条款总结 读书笔记(

《Effective C++》学习笔记条款21 必

条款2:最好使用C++转型操作符(1)

条款2:最好使用C++转型操作符

《Effective C++》学习笔记条款27 尽

《Effective C++》学习笔记条款33 避

Effective C++:条款18:让接口容易被

Effective C++:条款17:以独立语句将

Effective C++:条款21:必须返回对象

图文推荐

effective c++ 条款03 整理
ZOJ 3640 Help Me
effective c++ 条款03 整理
CF 518C(Anya and
effective c++ 条款03 整理
hdu 1016 Prime R
UVA - 11987 - A
分类:默认分类 时间:2015-03-13 人气:1
本文关键词:
分享到:

相关文章

Copyright (C) quwantang.com, All Rights Reserved.

趣玩堂 版权所有 京ICP备15002868号

processed in 0.014 (s). 10 q(s)