社区
C++ 语言
帖子详情
关于的const的使用
zmzbs123
2007-08-31 04:23:21
一个类的声明中,public关键字下
const string& get_AiossHome() const;
前面的const和后面的const有什么区别啊?
...全文
289
14
打赏
收藏
关于的const的使用
一个类的声明中,public关键字下 const string& get_AiossHome() const; 前面的const和后面的const有什么区别啊?
复制链接
扫一扫
分享
转发到动态
举报
写回复
配置赞助广告
用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,即不能修改类的成员
关于
const
的用法
我们知道,
const
是一个关键词,它所修饰的常变量是C语言常量中的一种。 首先我们通过例子来了解
const
的用法。
C语言 基础知识之
const
(
const
是什么,
const
的作用,
const
的
使用
)
一、
const
是什么
const
是C/C++中的类型修饰符。 二、
const
的作用 1、对变量声明只读特性,保护变量值以防被修改 2、节省空间,避免不必...三、
const
的
使用
1、
const
和普通变量 (1)编译器在编译过程中把...
C++
const
使用
详解
转发自C++
const
使用
详解 - 迪米特 - 博客园 1.
const
常量和宏常量
const
int max=100; #define max 100;
const
常量相对宏常量有两个有点: 1)有类型安全检查 2)占用内存空间少 2.
const
变量在内存中的位置 我们在C...
vue中
const
的
使用
在ES6开发中,优先
使用
const
,只有需要修改某个标识符值的时候采用let 1.声明后必须初始化赋值,如:
const
name='aaa',不可以
const
name; 2.常量的含义是指向的对象不能修改,但是可以修改对象中的属性 如: ...
js中关于
const
在for in或者for of中的
使用
js中关于
const
在for in或者for of中的
使用
const
声明的变量在一个块级作用域中是不能够重新赋值。 那么在这个for循环当中
使用
会报错: for(
const
i = 0;i<3;i++){ console.log(i); } 在chrome浏览器中我们可以...
C++ 语言
64,654
社区成员
250,484
社区内容
发帖
与我相关
我的任务
C++ 语言
C++ 语言相关问题讨论,技术干货分享,前沿动态等
复制链接
扫一扫
分享
社区描述
C++ 语言相关问题讨论,技术干货分享,前沿动态等
c++
技术论坛(原bbs)
社区管理员
加入社区
获取链接或二维码
近7日
近30日
至今
加载中
查看更多榜单
社区公告
请不要发布与C++技术无关的贴子
请不要发布与技术无关的招聘、广告的帖子
请尽可能的描述清楚你的问题,如果涉及到代码请尽可能的格式化一下
试试用AI创作助手写篇文章吧
+ 用AI写文章