查看: 3280| 回复: 8
跳转到指定楼层
上一主题 下一主题
收起左侧

[学C/C++] c++关于const的问题

全局:

注册一亩三分地论坛,查看更多干货!

您需要 登录 才可以下载或查看附件。没有帐号?注册账号

x
#include<iostream>
using namespace std;
class con
{
public:
    void function()const                        //(1)
    { cout<<"this is inside function const"<<endl;}
    void function()                             //(2)
    { cout<<"this is inside function "<<endl;}
};
void main()
{
    con const t;
    t.function();  //(*)
}

执行上面的程序,(*)调用的是(1)
如果去掉红色字体const,(*)调用的是(2)
我的问题:  明显,函数function(1)和(2)是重载,我的原本理解是compiler是按
照函数名和argument list来识别函数的,按照我的理解(1)(2)不能实现重载。 那
么我的理解错了,请问正确的应该是怎样的?或者能不能解释下红色字体const对 运行
结果影响,谢谢大虾们。

上一篇:Amazon : print level
下一篇:Google : Inplace rotate picture
🔗
 楼主| jpjerry 2011-6-27 05:32:28 | 只看该作者
全局:
此帖发在这里合适不?若不合适,请指点该发往哪里,谢谢
回复

使用道具 举报

🔗
MontagueHu 2011-6-27 06:39:59 | 只看该作者
全局:
在这个例子里,const的意思是只有const的object才能call这个function,并且这个function不能修改object的状态,即不能修改object的任何properties。
回复

使用道具 举报

🔗
 楼主| jpjerry 2011-6-27 07:52:34 | 只看该作者
全局:
回复 3# MontagueHu

有点不对吧,一般情况下,就算object不是const类型的,也能调用 类中的const 的function。
function为const的意思是 在function的body中不改变任何值。那么非const的object应该也能调用此类function。

这里的问题应该在于当函数有重载时, const object对函数的选择。
回复

使用道具 举报

🔗
MontagueHu 2011-6-27 08:02:31 | 只看该作者
全局:
恩,我错了。不过这个是一个非常tricky的problem,我猜是compiler dependent,至少compiler要issue一个warning。公司production code里面应该不会出现这么奇怪的code,比较学术。下面是一个别人的讨论,你可以参考一下

http://www.parashift.com/c++-faq ... ness.html#faq-18.12
回复

使用道具 举报

🔗
 楼主| jpjerry 2011-6-27 08:17:06 | 只看该作者
全局:
回复 5# MontagueHu

谢谢, 我是初学者,所以问题都比较奇怪,例子也是我自己针对想到的问题写的,比较诡异些。
回复

使用道具 举报

🔗
wwwyhx 2011-6-27 13:01:13 | 只看该作者
全局:
#include
using namespace std;
class con
{
public:
    void function()const                        //(1)
    { cout
jpjerry 发表于 2011-6-27 04:19


compiler应该是通过“函数签名”来识别函数,这个函数签名包括函数名,参数类型,参数个数和后缀const等表明函数特性的组合。比如你在用visual的时候可能会发现不能link的时候编译器会暴露保存的函数签名,是一个可以表示以上特性的字符串。

这里加const不加const调用的是因该具有不同函数签名的函数指针
回复

使用道具 举报

🔗
 楼主| jpjerry 2011-6-27 14:26:54 | 只看该作者
全局:
回复 7# wwwyhx
那就是说, const也作为一个属性来区分函数,所以从编译器角度出发,他们是不同的函数。
谢谢啦
回复

使用道具 举报

🔗
jarryjian 2013-3-5 12:31:18 | 只看该作者
全局:
const函数在类里面是可以重载的,一般情况下非const的会调用非const的,const会调用const的。
由于const对象不能更改属性,所以如果没有对应的const函数,调用时就会出错
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 注册账号
隐私提醒:
  • ☑ 禁止发布广告,拉群,贴个人联系方式:找人请去🔗同学同事飞友,拉群请去🔗拉群结伴,广告请去🔗跳蚤市场,和 🔗租房广告|找室友
  • ☑ 论坛内容在发帖 30 分钟内可以编辑,过后则不能删帖。为防止被骚扰甚至人肉,不要公开留微信等联系方式,如有需求请以论坛私信方式发送。
  • ☑ 干货版块可免费使用 🔗超级匿名:面经(美国面经、中国面经、数科面经、PM面经),抖包袱(美国、中国)和录取汇报、定位选校版
  • ☑ 查阅全站 🔗各种匿名方法

本版积分规则

>
快速回复 返回顶部 返回列表