关于const的用法,请高手解释一下.

wfh_178 2008-05-06 11:32:24
在类中有一个函数声明为:
const unsigned short *const Function(const unsigned short* a);

请问前面两个const什么意思?
...全文
157 20 打赏 收藏 转发到动态 举报
写回复
用AI写文章
20 条回复
切换为时间正序
请发表友善的回复…
发表回复
Peterry 2008-05-08
  • 打赏
  • 举报
回复
[Quote=引用 19 楼 mirsoft 的回复:]
http://www.jw35.cn/xc.asp?pic=mirsoft
[/Quote]

... ...
mirsoft 2008-05-08
  • 打赏
  • 举报
回复
http://www.jw35.cn/xc.asp?pic=mirsoft
Peterry 2008-05-08
  • 打赏
  • 举报
回复
const unsigned short *const Function(const unsigned short* a);
第一个const表示函数返回的是一个指向const unsigned short类型的指针,第二个const表示函数返回的指针是一个只读变量。
这就好象下面这两个的区别:
const int* a; //相当于(const int)*,(当然这么写是不对的,就是这么个意思)表示指针指向的是一个只读int变量,此变量的值不能被改变。
int* const a; //表示指针指向的是一个普通字符变量,但是指针本身是一个只读变量,它指向谁,就必须始终指向谁,不能被改变。但是它指向的那个变量
//的值可以被改变,就是说*a = XXX可以做,但是a = &XXX就不行。
int const* a; //和const int* a;一样。

至于写在方法后面的const,那是表示此方法保证不会更改调用者传进来的内容,在这样的方法里面,如果执行了写操作,编译器是会报错的,这样方便我们避免一些逻辑错误。
星光伴月 2008-05-07
  • 打赏
  • 举报
回复
[Quote=引用 15 楼 mscf 的回复:]
写在最后就变成常函数了,说明该在操作过程中不会修改数据
[/Quote]
在类中才会有这种写法,呵呵。
jieao111 2008-05-06
  • 打赏
  • 举报
回复
2楼正解
wfh_178 2008-05-06
  • 打赏
  • 举报
回复
位置错了,应该是这样:

const unsigned short *const Function(const unsigned short* a) const;
wfh_178 2008-05-06
  • 打赏
  • 举报
回复
1楼的不对,好像2楼的正确,right?

应该还可以这样写:
const unsigned short const* Function(const unsigned short* a) const;

薛定谔之死猫 2008-05-06
  • 打赏
  • 举报
回复
对齐有点问题,说的就是这个意思
wfh_178 2008-05-06
  • 打赏
  • 举报
回复
但是我记得第二个const是写在函数最后的

const unsigned short *Function(const unsigned short* a) const;

一般是这样.可以放到前面去吗?
这个C++真是的
薛定谔之死猫 2008-05-06
  • 打赏
  • 举报
回复
const unsigned short *const
^ ^
修饰指针指向的变量 修饰指针变量
hblinlin 2008-05-06
  • 打赏
  • 举报
回复
第一个返回const变量,表示返回值不允许修改。
第二个是const函数,表示该函数不修改类的属性。
mujiok2003 2008-05-06
  • 打赏
  • 举报
回复
修饰返回值,返回的是unsigned short型的指针(临时变量p),第一个const表示不能修改*p,即*p不能作左值
如*p = 10是非法的;第二个const表示p的指向是不能改变的,即p是常指针,p不能作为左值,如 p = NULL是非法的
薛定谔之死猫 2008-05-06
  • 打赏
  • 举报
回复
写在最后就变成常函数了,说明该在操作过程中不会修改数据
WingForce 2008-05-06
  • 打赏
  • 举报
回复
[Quote=引用 13 楼 wfh_178 的回复:]
read_only_val_1 = 1; /* 向只读变量赋值 */

只读变量怎么能被赋值?
[/Quote]

我这段代码中凡是加注释的都是编译出错的。。。
wfh_178 2008-05-06
  • 打赏
  • 举报
回复
read_only_val_1 = 1; /* 向只读变量赋值 */

只读变量怎么能被赋值?
WingForce 2008-05-06
  • 打赏
  • 举报
回复
int value = 0;

const int read_only_val_1 = 0;
int const read_only_val_2 = 0;

int *normal_point;

const int* point_to_read_only_val_1 = &value;
int const* point_to_read_only_val_2 = &value;

int * const read_only_point_to_val = &value;
const int * const read_only_point_to_read_only_val = &value;

const int const* error_define = &value; /* 没有这种用法 */

read_only_val_1 = 1; /* 向只读变量赋值 */
read_only_val_2 = 1; /* 向只读变量赋值 */
normal_point = &read_only_val_1; /* 不能将只读变量的地址赋值给普通指针 */

point_to_read_only_val_1 = &read_only_val_1;
*point_to_read_only_val_1 = 1; /* 通过指向只读变量的指针赋值 */

point_to_read_only_val_2 = &read_only_val_1;
*point_to_read_only_val_2 = 1; /* 通过指向只读变量的指针赋值 */

*read_only_point_to_val = 1;
read_only_point_to_val = 0; /* 向只读指针的赋值 */

*read_only_point_to_read_only_val = 1;/* 通过指向只读变量的指针赋值 */
read_only_point_to_read_only_val = 0; /* 向只读指针的赋值 */
qmm161 2008-05-06
  • 打赏
  • 举报
回复
[Quote=引用 10 楼 zsxcn 的回复:]
返回指向常量的常量指针
[/Quote]
是不是应该说,返回指向常量的指针常量!
zsxcn 2008-05-06
  • 打赏
  • 举报
回复
返回指向常量的常量指针
星光伴月 2008-05-06
  • 打赏
  • 举报
回复
[Quote=引用 3 楼 wfh_178 的回复:]
但是我记得第二个const是写在函数最后的

const unsigned short *Function(const unsigned short* a) const;

一般是这样.可以放到前面去吗?
这个C++真是的
[/Quote]

什么时候可以写在后面,写在后面表示什么意思?再好好想想吧。
hzj629206 2008-05-06
  • 打赏
  • 举报
回复
2楼讲得很好。

64,637

社区成员

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

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