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),例如:
View Code
输出结果如下:
可见虽然const_cast表面上改变了变量的const性质,但a的值实际上还是没有改变(编译器仍然背着我们干了不少事),所以const_cast的实际用途并不是改变const对象的值,而是"暂时"去除对象的const属性使其可以作为参数传入非const函数,企图通过const_cast改变const对象的值可能会导致未预料的结果.因此个人认为5中的第二段代码(出自Effective C++ “条款3 尽可能用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”)存在一些错误,如有错误欢迎批评指正!
相关文章推荐
- C++的struct和union
- C++的struct和union
- c语言 typedef的用法
- printf中的使用(c语言)
- C++ 输出缓冲区的管理
- C++ 输出缓冲区的管理
- 逆波兰表达式实现计算器(附c++代码)
- C++中变量的作用域与生命周期
- C++拷贝构造函数详解
- c++类的初创建(复数类)
- C++对象模型——临时性对象 (第六章)
- C++类静态成员与类静态成员函数
- C++学习:任意合法状态下汉诺塔的移动
- 2048小游戏c++实现
- 利用opencv源码和vs编程序训练分类器haartraining.cpp
- 最小生成树普利姆算法c语言实现__Prim
- C++读写.mat文件
- C++学习:任意合法状态下汉诺塔的移动(原创)
- C++ 虚函数表解析
- Example of MPI_Type_struct