关于的const的使用

zmzbs123 2007-08-31 04:23:21
一个类的声明中,public关键字下
const string& get_AiossHome() const;
前面的const和后面的const有什么区别啊?
...全文
289 14 打赏 收藏 转发到动态 举报
写回复
用AI写文章
14 条回复
切换为时间正序
请发表友善的回复…
发表回复
fish6344 2007-09-02
  • 打赏
  • 举报
回复
在语句"const string& get_AiossHome() const;"中:

前面一个"const"是get_AiossHome()函数的返回类型修饰符,它说明该函数返回一个指向常量型string的引用变量,这说明不可以通过这个引用去修改返回值引用所指的string对象。

后一个"const"说明该函数是一个常型函数!

假设有如下类:

class Pig
{
string _s;
public:
Pig(const string& _sr) : _s(_sr){}
   void show(void){ cout << _s << endl;}
};

如下使用该类:

void main()
{

Pig _p("演示ABC成功!");
_p.show(); //说明show()成员函数访问到数据成中_s!
}

上述程序行为良好,_p.show()将向屏幕输出"演示ABC成功!"!

但是,如果把_p变量声明为const Pig型,例如:

void main()
{
const Pig _p("演示!");
_p.show();//生成错误,不能访问_s!
}

其中的"_p.show();"语句将生成编译期错误,类似:
error ##: 不能将“this”指针从“const Pig”转换为“Pig &”

原因是,当一个对象是常量型对象的时候,它内部凡是没有以"mutable"关键字修饰的数据成员都是常量,而在这个程序中,编译器为show()插入的this指针是非常型Pig指针,因此当调有show()函数的时候,就发生了用非常型指针访问常量的错误行为!

但如果把show()函数声明为常型函数,例如:

class Pig
{
string _s;
public:

Pig(const string& _sr) : _s(_sr){}
void show(void)const//修改为常型函数!
{
cout << _s << endl;
}
};

则:

void main()
{
const Pig _p("演示!");
_p.show(); //好,可以访问_s!
}

上述程序行为良好,_p.show()将向屏幕输出"演示ABC成功!"!,演示show()成功的访问到了_s,这就是后一个const修饰的作用-使一个成员函数具有了可访问常量对象成员的能力!

原因是,当一个成员函数被声明为常型函数的时候,编译器为该函数插入一个常型对象的this指针,类似声明"void show(const Pig* const this);",这样,当调有show()函数的时候,就再不会发生用非常型指针访问常量的错误行为!(可参考《C++ Common Knowledge》page25-条款10-常量成员函数的含义)




a013231 2007-09-02
  • 打赏
  • 举报
回复
前面的const是修饰string&的,后面的是修饰this指针的.
wang_wuhui 2007-09-02
  • 打赏
  • 举报
回复
溫故....
gooderfeng 2007-09-01
  • 打赏
  • 举报
回复
函数后面的const可以用来重在成员函数。
itegel84 2007-09-01
  • 打赏
  • 举报
回复
这个问题见过好次了。感觉CSDN应该把典型问题集中起来讨论会更好。
peehk613 2007-09-01
  • 打赏
  • 举报
回复
const string& get_AiossHome() const;
前面的const 指返回的是一个常量string的引用,
最后的那个放在函数后面的const告诉编译器,这个函数不会对类对象中的成员数据做任何修改,如果你在这个函数的实现代码中不小心对成员数据进行了修改,编译器会给你报错的。
MagiSu 2007-09-01
  • 打赏
  • 举报
回复
我认为后面一个const的意思是说,函数内部成员不会被更改,所以可以用在const对象上。
drowsychat 2007-09-01
  • 打赏
  • 举报
回复
恩。。。。
还是复习一下常成员函数吧,后边的CONST 是函数的一部分
liufei1108 2007-09-01
  • 打赏
  • 举报
回复
前面那个const是指的返回值是个常量,后面的const指的是函数是个const,即不能修改类的数据成员
yangsf5 2007-09-01
  • 打赏
  • 举报
回复
1楼
taodm 2007-08-31
  • 打赏
  • 举报
回复
写程序,试着调用这个函数试试。
估计你看书是不做习题的。
zmzbs123 2007-08-31
  • 打赏
  • 举报
回复
我有那本书,也看了,就是。。。没看明白!!
taodm 2007-08-31
  • 打赏
  • 举报
回复
买本C++Primer,到书后索引表里找cosnt。所以关于const的知识都在那列着呢。
dnboy 2007-08-31
  • 打赏
  • 举报
回复
前面那个const是指的返回值是个常量,后面的const指的是函数是个const,即不能修改类的成员

64,654

社区成员

发帖
与我相关
我的任务
社区描述
C++ 语言相关问题讨论,技术干货分享,前沿动态等
c++ 技术论坛(原bbs)
社区管理员
  • C++ 语言社区
  • encoderlee
  • paschen
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
  1. 请不要发布与C++技术无关的贴子
  2. 请不要发布与技术无关的招聘、广告的帖子
  3. 请尽可能的描述清楚你的问题,如果涉及到代码请尽可能的格式化一下

试试用AI创作助手写篇文章吧