“常用公式”在线计算,“设计手册”在线查询
#include<iostream>using namespace std;class con{public:    void function()const                      //(1)    { cout<<"this is insidefunction const"<<endl;}    void function()                           //(2)    { cout<<"this is insidefunction "<<endl;}};void main(){    con const t;    t.function();  //(*)}执行上面的程序,(*)调用的是(1)如果去掉加粗字体const,(*)调用的是(2)我的问题:明显,函数function(1)和(2)是重载,我的原本理解是compiler是按照函数名和argument list来识别函数的,按照我的理解(1)(2)不能实现重载。那么我的理解错了,请问正确的应该是怎样的?或者能不能解释下红色字体const对运行结果影响,谢谢大虾们。
分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 分享分享 分享淘帖 支持支持 反对反对

共 1 个关于本帖的回复 最后回复于 2013-7-30 13:16

沙发
季良 新来的 发表于 2013-7-30 13:16:54 | 只看该作者
研发埠培训中心
在这个例子里,const的意思是只有const的object才能call这个function,并且这个function不能修改object的状态,即不能修改object的任何properties。有点不对吧,一般情况下,就算object不是const类型的,也能调用类中的const 的function。function为const的意思是在function的body中不改变任何值。那么非const的object应该也能调用此类function。这里的问题应该在于当函数有重载时, const object对函数的选择。#includeusing namespace std;class con{public:    void function()const                       //(1)    { cout}compiler应该是通过“函数签名”来识别函数,这个函数签名包括函数名,参数类型,参数个数和后缀const等表明函数特性的组合。比如你在用visual的时候可能会发现不能link的时候编译器会暴露保存的函数签名,是一个可以表示以上特性的字符串。这里加const不加const调用的是因该具有不同函数签名的函数指针
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

关注我们

360网站安全检测平台