在const成员函数中强制的去掉const
来源:互联网 发布:下列变量不是c语言的 编辑:程序博客网 时间:2024/04/27 13:09
C++关心的是去掉偶然的错误而不是防止刻意的欺骗。也就是说我们可以通过“强制去掉const”来做出一个骗局。
就是让一些对象在用户看起来是常量,而事实上他们的状态是可以改变的,这种技巧有时是有用的。这样的类可以通过显式写出来。
例如:
#include <iostream>class C{public : int g() const { ((C *)this)->x = 100; return x; }public : int x;};int main(){ const C c; std::cout <<"x of C is " << c.g() << std::endl; system("PAUSE"); return 0;}改变一个const对象可能不太可靠,在某些上下文中容易出错。如果对象位于只读存储器中,那么根本无法工作。一般来说,更好的方式是将这种对象的可变部分描述成另一个独立的对象。例如:#include <iostream>class C{public : int g() const { ((C *)this)->x = 100; return x; }public : int x;};class CC{public : CC():x(*new int) { x = 0; }~CC(){ delete &x;}public : int g() const { x = 1024; return x; }public : int &x;};int main(){ const C c; std::cout <<"x of C is " << c.g() << std::endl; const CC cc; std::cout << "x of CC is " << cc.g() << std::endl; system("PAUSE"); return 0;}
如果还不是很懂,那就看下面一个例子:
#include <iostream>class C{public : int g() const { ((C *)this)->x = 100; return x; }public : int x;};class CC{public : CC():x(new int) { }public : int g() const { //x = 0; // error : x cannot be changed *x = 1024; return *x; }public : int *x;};int main(){ const C c; std::cout <<"x of C is " << c.g() << std::endl; const CC cc; std::cout << "x of CC is " << cc.g() << std::endl; system("PAUSE"); return 0;}
对于指针来说,const对象只是针对指针的值,让指针的值不能被修改,但是指针所指向的内容还是可以修改的。也就是说这是个顶层const。
0 0
- 在const成员函数中强制的去掉const
- 在const和非const成员函数中避免重复
- 在 const 和 non-const 重载的成员函数中避免代码重复
- C++中类的const成员函数和const对象
- 类成员函数中const的使用
- C++ 中const成员函数的使用
- 类成员函数中const的使用
- 类成员函数中const的使用
- const 之 const修饰的成员函数
- C++中const成员函数
- C++中const成员函数和非const成员函数的重载
- C++中const成员函数和非const成员函数的重载
- 在类中const成员函数和非const成员函数可以作为重载成员函数同时存在
- const成员函数的使用
- 类的 const 成员函数
- 成员函数后面的const
- 类的const成员函数
- 类的const成员函数
- 深入理解指定IE浏览器渲染方式
- PowerDesigner(五)-概念数据模型(CDM生成LDM,PDM和OOM)
- "Host 'localhost' is not allowed to connect to this MySQL server" 的原因及解决办法
- 决策树模型组合之随机森林与GBDT
- Adapter---打造万能的ListView GridView 适配器
- 在const成员函数中强制的去掉const
- 关于周期信号傅利叶级数系数的一点思考
- CentOS6.3配置SVN之subversion1.7.7
- iOS UITextField知多少
- 编写更加稳定、可读性强的JavaScript代码
- 欢迎使用CSDN-markdown编辑器
- 管中窥豹,物联网之我见
- POI数据格式
- 学习笔记(一):inline内联函数