const成员函数

简介: 尽管函数名和参数列表都相同,void foo( ) const成员函数是可以与void foo( )并存的,可以形成重载! 我们假设调用语句为obj.foo(),如果obj为non-const对象,则调用foo()。

尽管函数名和参数列表都相同,void foo( ) const成员函数是可以与void foo( )并存的,可以形成重载! 我们假设调用语句为obj.foo(),如果objnon-const对象,则调用foo()。如果objconst对象,则调用foo()const。另外要注意,假如没有提供foo()const,则const obj调用foo()将会报错。但假如是没有提供foo(),则non-const obj调用foo()const是完全没有问题的。也就是说,non-const对象可以调用const函数(当然也可以调用non-const函数),但const对象不能调用non-const函数

const关键字所起作用的本质,就是把隐藏着的默认的this指针参数,改成const类型。也就是说:假如void foo( )函数被编译器改写为 void foo(T* pThis),则void foo( ) const将会被改写为void foo(const T* pThis) i.e. 在函数末尾添加一个const,就相当于在隐藏的this参数类型前加一个const.

这样做有两个效果,第一:编译器将不允许foo()const修改pThis指向的对象的成员。第二、const对象只能调用const成员函数,否则就会报错说把const T* 转化为T* 会丢失qualifier

------------------------------

//Only member functions declared as const can be invoked for a class object that is const. The const keyword is placed between the parameter list and the body of the member function. A const member function defined outside the class body must specify the constkeyword in both its declaration and its definition. For example:

class Screen

{

public:     

bool isEqual( char ch ) const;      // ... private:     

string::size_type    _cursor;     

string               _screen;      // ...

};

bool Screen::isEqual( char ch ) const

{     

return ch == _screen[_cursor];

}

原文

http://www.cnblogs.com/visayafan/archive/2011/11/24/2261849.html

目录
相关文章
|
存储 Kubernetes Linux
Kubernetes 的配置资源 ConfigMap(01部分)
Kubernetes 的配置资源 ConfigMap(01部分)
|
缓存 C++
hooks-riverpod 使用
hooks-riverpod 使用
mapbox点位动态连线
【8月更文挑战第21天】
115 0
|
存储 算法 调度
基本的算法(续 1)之图算法下
基本的算法(续 1)之图算法
113 0
|
移动开发 JavaScript 前端开发
Vue | Vue.js 全家桶 - Vue-Router详解(一)
Vue | Vue.js 全家桶 - Vue-Router详解(一)
|
存储 编译器 API
Boost库学习笔记(三)内存对齐模块
Boost库学习笔记(三)内存对齐模块
616 0
|
存储 人工智能 开发工具
绝了,一句话写完一个功能,用Bito初体验。
绝了,一句话写完一个功能,用Bito初体验。
429 0
|
运维 Kubernetes Linux
安装Minikube并启动一个Kubernetes环境
Minikube 是一种轻量级的Kubernetes 实现,可在本地计算机上创建VM 并部署仅包含一个节点的简单集群。Minikube 可用于Linux , macOS 和Windows 系统。Minikube CLI 提供了用于引导集群工作的多种操作,包括启动、停止、查看状态和删除。
803 0
|
SQL XML 安全
Mybatis 框架下 SQL 注入攻击的 3 种方式,真是防不胜防!
SQL注入漏洞作为WEB安全的最常见的漏洞之一,在java中随着预编译与各种ORM框架的使用,注入问题也越来越少。 新手代码审计者往往对Java Web应用的多个框架组合而心生畏惧,不知如何下手,希望通过Mybatis框架使用不当导致的SQL注入问题为例,能够抛砖引玉给新手一些思路。 一、Mybatis的SQL注入
455 0
Mybatis 框架下 SQL 注入攻击的 3 种方式,真是防不胜防!