c++关于const的使用

雷雷518 2010-08-10 02:06:16
const char get(int index) const;
为一个类的成员函数,此句是加两个const,有什么意义?如果去掉第一个const有什么意义;及去掉第二个const又有什么意义?
鄙人学的不好,望各位多多指点
...全文
247 27 打赏 收藏 转发到动态 举报
写回复
用AI写文章
27 条回复
切换为时间正序
请发表友善的回复…
发表回复
nazzon2004 2010-08-11
  • 打赏
  • 举报
回复
const char get(int index) const;
为一个类的成员函数,此句是加两个const,有什么意义?如果去掉第一个const有什么意义;及去掉第二个const又有什么意义?
鄙人学的不好,望各位多多指点

返回值和类的成员不能被修改
九月恒心 2010-08-11
  • 打赏
  • 举报
回复
[Quote=引用 9 楼 wyz007134 的回复:]

如果是const char get(const int index) const;那岂不是更难理解了?

其实理解起来也不难分解看看

第一个const 修饰char,char是get的返回值,也就是get函数返回一个常量字符
第二个const 修饰 int index,index是get的参数,说明get带有一个常量整形参数
第三个const,是函数末尾的const,用于类的成员函……
[/Quote]

解释的很详细,谢谢哦
lovestefanie 2010-08-11
  • 打赏
  • 举报
回复
[Quote=引用 9 楼 wyz007134 的回复:]
如果是const char get(const int index) const;那岂不是更难理解了?

其实理解起来也不难分解看看

第一个const 修饰char,char是get的返回值,也就是get函数返回一个常量字符
第二个const 修饰 int index,index是get的参数,说明get带有一个常量整形参数
第三个const,是函数末尾的const,用于类的成员函数……
[/Quote]
学习了,精辟
libinfei8848 2010-08-11
  • 打赏
  • 举报
回复
这样函数声明通常出现在类的声明
独酌逸醉 2010-08-11
  • 打赏
  • 举报
回复
http://blog.csdn.net/chinazhangjie/archive/2010/08/04/5788612.aspx
ToBeOOP 2010-08-11
  • 打赏
  • 举报
回复
[Quote=引用 8 楼 qq120848369 的回复:]
引用 5 楼 llahyy 的回复:
有const这个类?


楼主,我们一致推荐你耐心看书,其他不说了/
[/Quote]

容易理解,UP!
willabc 2010-08-11
  • 打赏
  • 举报
回复
学习啦!
都先生 2010-08-11
  • 打赏
  • 举报
回复
在C++ Primer Plus第十章 对象和类 很详细的讲解。
meisizhaosi 2010-08-11
  • 打赏
  • 举报
回复
第一个const表示返回值不可以修改,由于是按数值传递,编译器在里面创建副本,如果这个参数是按const传递的,这个副本上不可以修改的,在函数体执行完函数的功能后,如果需要返回值,用return返回,如果不需要则不用写,编译器会生成一个隐性退出点,这两种情况都是表示函数执行结束,这个副本离开了函数的作用域,自然被编译器自动消灭,但是如果需要返回,编译器会复制这个副本,然后再把它消灭,在返回数值类型前面加上const表示这个副本的副本是不可以被修改的,最后一个const表示这是一个const成员函数,表示里面的private部分的数据在这个函数里面不能被修改,只能用const类指针来调用类的const成员函数,不能来调用类的非const成员函数,因为const类指针里的const表示返回的指针不可以被修改,而非const成员函数有可以改变指针.
RLib 2010-08-11
  • 打赏
  • 举报
回复
[Quote=引用 1 楼 thefirstz 的回复:]
第一个是修饰返回值,第二个修饰函数,表示这个函数是const成员函数
[/Quote]

正解
雷雷518 2010-08-11
  • 打赏
  • 举报
回复
谢谢LS各位,这下很清楚了。
zhangzhongke007 2010-08-10
  • 打赏
  • 举报
回复
9L讲的详细。
k81348 2010-08-10
  • 打赏
  • 举报
回复
[Quote=引用 9 楼 wyz007134 的回复:]

如果是const char get(const int index) const;那岂不是更难理解了?

其实理解起来也不难分解看看

第一个const 修饰char,char是get的返回值,也就是get函数返回一个常量字符
第二个const 修饰 int index,index是get的参数,说明get带有一个常量整形参数
第三个const,是函数末尾的const,用于类的成员函……
[/Quote]

经典!!UP!
  • 打赏
  • 举报
回复
const char get(int index) const前面那个表示返回一个常字符,后面这个const表示不会修改变量值,函数体内不允许调用其他非const修饰的函数
黎翔 2010-08-10
  • 打赏
  • 举报
回复
A b,c;
b.tval(c); 这时b就是隐式的访问,c就是显示的访问
c.tval(b); 这时c就是隐式的访问,b就是显示的访问
yujixi123 2010-08-10
  • 打赏
  • 举报
回复
[Quote=引用 9 楼 wyz007134 的回复:]

如果是const char get(const int index) const;那岂不是更难理解了?

其实理解起来也不难分解看看

第一个const 修饰char,char是get的返回值,也就是get函数返回一个常量字符
第二个const 修饰 int index,index是get的参数,说明get带有一个常量整形参数
第三个const,是函数末尾的const,用于类的成员函……
[/Quote]经典
黎翔 2010-08-10
  • 打赏
  • 举报
回复
我这里引伸一个函数:
class A
{
int num;
.....
};
const A & tval(const A & a) const;
该函数隐式的访问一个对象,而显示地访问另一个对象,并返回其中一个对象的引用。
括号中的const表明,该函数不会修改被显示地访问的对象;而括号后的const表明,该函数不会修改被隐式地访问的对象。由于该函数返回了两个const 对象之一的引用,因此返回类型也应为const引用。
该函数必须用到this指针
例如:
const A & tval(const A & a) const
{
if (a.num > num)
return a;
else
return *this;
}
wrmtc108 2010-08-10
  • 打赏
  • 举报
回复
第一个 const 禁止修改返回值
第二个 const 修饰 this指针,禁止 通过this 修改对象
wyz007134 2010-08-10
  • 打赏
  • 举报
回复
如果是const char get(const int index) const;那岂不是更难理解了?

其实理解起来也不难分解看看

第一个const 修饰char,char是get的返回值,也就是get函数返回一个常量字符
第二个const 修饰 int index,index是get的参数,说明get带有一个常量整形参数
第三个const,是函数末尾的const,用于类的成员函数定义时修饰,但是具体修饰什么,不明显,因为它后面没有明确的跟着什么。
函数的后面是函数体,这个const就是修饰函数体的,修饰函数体的作用就是要求这个函数体不对类的成员造成改变,比如赋值,自增自减等操作都是非法的。


class A
{
public:
A(int a) : m_a(a)
{}
void foo(int a) const
{
cout << ++a << endl; // OK
// cout << ++m_a << endl; // ERROR
}
int m_a;
};
qq120848369 2010-08-10
  • 打赏
  • 举报
回复
[Quote=引用 5 楼 llahyy 的回复:]
有const这个类?
[/Quote]

楼主,我们一致推荐你耐心看书,其他不说了/
加载更多回复(7)

64,676

社区成员

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

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