标题:const用法的疑问
只看楼主
kuaisha
Rank: 2
等 级:论坛游民
帖 子:120
专家分:30
注 册:2016-8-3
结帖率:100%
 问题点数:0 回复次数:8 
const用法的疑问

double sum(const truct funds *money)函数为什么要加const,不加也没关系吧,毕竟都没有改变*money的数值?
搜索更多相关主题的帖子: const 用法 疑问 money 改变 
2018-08-21 00:06
吹水佬
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
等 级:版主
威 望:432
帖 子:10064
专家分:41463
注 册:2014-5-20
得分:0 
const修饰指针时:
const int *p; // p 可变,p 指向的对象不可变
int const *p; // p 可变,p 指向的对象不可变
int *const p; // p不可变,p 指向的对象可变
const int *const p; //指针 p 和 p 指向的对象都不可变

先忽略类型名(编译器解析的时候也是忽略类型名)
看 const 离哪个近。“近水楼台先得月”,离谁近就修饰谁。
const int *p; //const 修饰*p, p 是指针,*p 是指针指向的对象,不可变
int const *p; //const 修饰*p, p 是指针,*p 是指针指向的对象,不可变
int *const p; //const 修饰 p,p 不可变,p 指向的对象可变
const int *const p; //前一个 const 修饰*p, 后一个 const 修饰 p,指针 p 和 p 指向的对象都不可变
2018-08-21 04:05
花脸
Rank: 8Rank: 8
等 级:蝙蝠侠
威 望:9
帖 子:788
专家分:907
注 册:2017-1-4
得分:0 
const修饰指针变量时:

  (1)只有一个const,如果const位于*左侧,表示指针所指数据是常量,不能通过解引用修改该数据;指针本身是变量,可以指向其他的内存单元。

  (2)只有一个const,如果const位于*右侧,表示指针本身是常量,不能指向其他内存地址;指针所指的数据可以通过解引用修改。

  (3)两个const,*左右各一个,表示指针和指针所指数据都不能修改。

https://
2018-08-21 12:09
zhangchm2018
Rank: 3Rank: 3
等 级:论坛游侠
威 望:1
帖 子:32
专家分:129
注 册:2018-8-18
得分:0 
因为传递给 sum() 的形参是结构 stan 的地址,所以在 sum() 函数中是可以改变 stan 内的值。
又因为不希望在 sum() 函数中因为某些未知的情况而改变结构 stan 的值,所以加上 const。

ps:书本倒数第二段的最后一句已经说明了。
2018-08-21 23:57
kuaisha
Rank: 2
等 级:论坛游民
帖 子:120
专家分:30
注 册:2016-8-3
得分:0 
回复 4楼 zhangchm2018
但是这个程序并没有改变atan的值啊,那是不是可以不加?
2018-08-24 19:50
forever74
Rank: 12Rank: 12Rank: 12
来 自:CC
等 级:贵宾
威 望:49
帖 子:1636
专家分:3940
注 册:2007-12-27
得分:0 
你没打算考试作弊,是不是可以直接不要监考的了呢?

对宇宙最严谨的描述应该就是宇宙其实是不严谨的
2018-08-24 20:01
forever74
Rank: 12Rank: 12Rank: 12
来 自:CC
等 级:贵宾
威 望:49
帖 子:1636
专家分:3940
注 册:2007-12-27
得分:0 
区别一下
可能不出错

不可能出错

对宇宙最严谨的描述应该就是宇宙其实是不严谨的
2018-08-24 20:03
zhangchm2018
Rank: 3Rank: 3
等 级:论坛游侠
威 望:1
帖 子:32
专家分:129
注 册:2018-8-18
得分:0 
以下是引用kuaisha在2018-8-24 19:50:34的发言:

但是这个程序并没有改变atan的值啊,那是不是可以不加?

是防止在函数内因为意外情况而改变,非必须,只是一种保障。
而且这能提高可读性,比如说 stan 的值跟预期不一样,所以检查有关 stan 代码,当看到 const 限定了传函数形参 就知道该函数不改变它的值,就能跳过这个函数,检查其他地方的代码。
2018-08-24 20:33
kuaisha
Rank: 2
等 级:论坛游民
帖 子:120
专家分:30
注 册:2016-8-3
得分:0 
回复 8楼 zhangchm2018
我明白了,谢谢!
2018-08-26 20:51



参与讨论请移步原网站贴子:https://bbs.bccn.net/thread-489329-1-1.html




关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.100470 second(s), 8 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved