免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
查看: 1802 | 回复: 2
打印 上一主题 下一主题

const 报错 [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2008-10-31 15:47 |只看该作者 |倒序浏览
#include <string>
using std::string;

class A
{
public:
&nbsp;&nbsp;&nbsp;&nbsp;inline const string& get()
&nbsp;&nbsp;&nbsp;&nbsp;{
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;return m_str;
&nbsp;&nbsp;&nbsp;&nbsp;}

private:
&nbsp;&nbsp;&nbsp;&nbsp;string m_str;
};

class B
{
public:
&nbsp;&nbsp;&nbsp;&nbsp;void fun(const A& a)
&nbsp;&nbsp;&nbsp;&nbsp;{
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;string tmp = a.get();
&nbsp;&nbsp;&nbsp;&nbsp;}
};

在linux下g++编译报错
const.cpp: In member function 'void B::fun(const A&)':
const.cpp:21: error: passing 'const A' as 'this' argument of 'const std::string& A::get()' discards qualifiers

在solaris下报错
"const.cpp", line 21: Error: Non-const function A::get() called for const object.

而如果在get函数后面加上const就好了,这是怎么回事
另外如果不是作为函数参数是没有问题的

论坛徽章:
0
2 [报告]
发表于 2008-10-31 15:57 |只看该作者
fun的参数是const A &a,因此只能调用a的const成员函数,否则不能保证不改变a的成员。

论坛徽章:
0
3 [报告]
发表于 2008-10-31 16:19 |只看该作者

回复 #2 emacsnw 的帖子

明白了
下面是一个另外一个例子
#include <string>
using std::string;

class A
{
public:
    inline const string& get()
    {
        return m_str;
    }

private:
    string m_str;
};

int main()
{
    const A a;
    a.get();
    return 0;
}
这个也会报错
如果把const A a;的const就可以

就是const对象只能调用const函数,即使函数中并没有改变成员变量值
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP