博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
const成员函数
阅读量:5306 次
发布时间:2019-06-14

本文共 1268 字,大约阅读时间需要 4 分钟。

尽管函数名和参数列表都相同,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

转载于:https://www.cnblogs.com/mydomain/p/3244881.html

你可能感兴趣的文章
metaq最佳实践
查看>>
js array.reduce
查看>>
利用WinCE的精准计时函数来输出pwm信号以便控制舵机
查看>>
(转)高性能网络编程2----TCP消息的发送
查看>>
知识点
查看>>
图论实验A题_网络
查看>>
Cocos2d-x 3.4在AndroidStudio上编译配置
查看>>
【2019年04月22日】A股最便宜的股票
查看>>
算法 数位DP(按位DP) hdoj 2089 hdoj 3555 uestc 1307 基础题
查看>>
OC语言构造方法
查看>>
Java 8新特性-4 方法引用
查看>>
多线程技术中生产者和消费者简单模拟实现
查看>>
上传jar包到nexus私服
查看>>
nginx error_page 404 用 php header 无法跳转
查看>>
Java多线程和并发基础
查看>>
CodeForces - 55D Beautiful numbers
查看>>
PHP CURL错误: error:140943FC
查看>>
array_combine
查看>>
[LeetCode-124] Binary Tree Maximum Path Sum
查看>>
使用JDK的zip编写打包工具类
查看>>