C++类的常成员函数
2016-04-18 16:43
141 查看
让一个成员函数带上常量性是什么意思呢?通常的答案是,一个常成员函数不会更改其class对象。这是一种平凡的表述,而编译器实现的手法也相当平凡。
任何非静态成员函数其实都被编译器隐式插入了一个指针类型的参数,以在调用时有一种指向class对象自身的途径。在函数内部,关键字this被用于给出该指针的值:
对于T类型的非常成员函数而言,其this指针的类型是T* const;亦即,它是一个指向非常量T对象的常量指针。该指针自身是不能被修改的(因此,它可以保证总是指向同一个T对象),但(通过它)可以修改它指向的T对象的(数据)成员。
而对于T类型的常成员函数而言,其this指针的类型是cosnt T* const;亦即,它是一个指向常量T对象的常量指针。该指针自身和其指向的class对象都是不可修改的。
任何非静态成员函数其实都被编译器隐式插入了一个指针类型的参数,以在调用时有一种指向class对象自身的途径。在函数内部,关键字this被用于给出该指针的值:
T t; t.DoSomething(); //“this”就是&t T* pt = &t; pt->DoSomething //“this”就是pt
对于T类型的非常成员函数而言,其this指针的类型是T* const;亦即,它是一个指向非常量T对象的常量指针。该指针自身是不能被修改的(因此,它可以保证总是指向同一个T对象),但(通过它)可以修改它指向的T对象的(数据)成员。
而对于T类型的常成员函数而言,其this指针的类型是cosnt T* const;亦即,它是一个指向常量T对象的常量指针。该指针自身和其指向的class对象都是不可修改的。
相关文章推荐
- OpenGL: Configuring GLFW and GLEW in Visual C++ Express
- [C++]函数对象(一)
- 编写高质量的C++代码--01 减少文件之间的编译依赖
- C++多重继承带来的问题
- C/C++内存泄漏检测
- 【c/c++】list
- c++ 字符串连接问题
- Effective C++笔记(三):资源管理
- terminate called after throwing an instance of 'std::bad_alloc
- 基于C语言实现简单的走迷宫游戏
- 输入流对象cin读取输入流的三种方式
- C++虚析构函数
- C++ STL中vector的内存机制和性能分析
- C语言结构体的字节对齐原则
- C++时间,文件及字符常用函数总结
- c++实现mysql数据库数据缓存
- 贪吃蛇C语言代码
- 【C++】日期类+日期万年历+日期计算器
- 【Visual C++】游戏开发笔记四十一 浅墨DirectX教程之九 为三维世界添彩:纹理映射技术(一)
- 介绍一个类型安全的回调库:libsigc++