您的位置:首页 > 编程语言 > C语言/C++

Effective C++ 条款3 尽可能用const

2015-08-17 23:37 316 查看
1. const可被施加于任何作用域内的对象,函数参数,函数返回类型,成员函数本体.用const修饰指针,如果const出现在*之前,表明指针不能更改所指向的对象的内容,如果const出现在*之后,表明指针只能指向同一块内存.另外int const*p和const int*p含义相同.如果对象成员有普通指针,那么构造该类的一个const对象时,const修饰使得该指针只能指向同一块内存,但指针指向的内容可以改变.

2. 将某些东西声明为const可以帮助编译器侦测出错误用法.

3. 编译器强制实行bitwise constness(又称physical constness,物理上的常量性,即成员函数不更改对象的任何一个bit时才可以说是const),例如:

#include<iostream>
using std::cout;
using std::endl;
int main(){
const int a = 5;
int& rta = const_cast < int&>(a) ;
rta = 6;
cout << "a: " << a << "    rtr: " << rta << endl;
cout << "&a: " << &a << "     &rta: " << &rta;
system("pause");
return 0;
}


View Code
输出结果如下:



可见虽然const_cast表面上改变了变量的const性质,但a的值实际上还是没有改变(编译器仍然背着我们干了不少事),所以const_cast的实际用途并不是改变const对象的值,而是"暂时"去除对象的const属性使其可以作为参数传入非const函数,企图通过const_cast改变const对象的值可能会导致未预料的结果.因此个人认为5中的第二段代码(出自Effective C++ “条款3 尽可能用const”)存在一些错误,如有错误欢迎批评指正!
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: