标题:const问题
只看楼主
hamsters
Rank: 2
等 级:论坛游民
帖 子:33
专家分:54
注 册:2012-6-10
得分:2 
const int ci = 1;
int i = 2;
const int *p;
p = &ci; // OK
p = &i;  // OK
*p = 3;  // error
i = 3;   // OK


反正搞清楚相关的语法就行了,书上说的东西也不一定都是对的。
我用编译器试了一下,还真是这样
2012-08-12 20:54
有容就大
Rank: 16Rank: 16Rank: 16Rank: 16
来 自:东土大唐
等 级:版主
威 望:74
帖 子:9048
专家分:14309
注 册:2011-11-11
得分:2 
const int *p=&ci;//convert address of non-const to address of a const
把一个可变地址(&ci) 转到不可变地址下(*p) 注释应该是想说这个吧

梅尚程荀
马谭杨奚







                                                       
2012-08-13 07:42
humy
Rank: 2
等 级:论坛游民
帖 子:69
专家分:18
注 册:2012-7-23
得分:0 
有师兄回答我说:
注意&cj所指向的内容,0,其本身类型为int而非const int,亦即,此时&ci所指对象确
实为non-const,且&ci本身为非const限定指针。
至于为何在const int ci =0这句中完成类型转换,多半是因为内置类型赋值采取的是值
传递方式。
int i;
: const int ci = 0;
: const int &j = i;   // ok: convert non-const to reference to const int
: const int *p = &ci; // ok: convert address of non-const to address of a const
那我想问0不是常数吗?怎么只是int不是const int?即使不是,他赋值给const int时就强制转化了吧?
2012-08-14 18:52
pangding
Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19
来 自:北京
等 级:贵宾
威 望:94
帖 子:6784
专家分:16751
注 册:2008-12-20
得分:0 
const int ci = 0; 应该理解成常变量的初始化:0 为整形字面,语义上是 int。这里一般不用类型转换这上提法,是只用 0 这个值来初始化 const int 这个常变量。

另外对 const int 取地址,返回的表达式应该是 coonst int * 的类型。你说由于值是 0,因而是 int * 是不对的。
静态类型语言的类型的确定,是看对象的类型,而不是看它的值。
2012-08-14 22:37
humy
Rank: 2
等 级:论坛游民
帖 子:69
专家分:18
注 册:2012-7-23
得分:0 
回复 14楼 pangding
谢谢,就是说,还是书上那个注释错了,对吧
2012-08-15 08:21
pangding
Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19
来 自:北京
等 级:贵宾
威 望:94
帖 子:6784
专家分:16751
注 册:2008-12-20
得分:0 
个人感觉是。不过这种地方也不用太较真。
2012-08-15 10:23



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




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

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