c++ primier 中的一个小问题

liuqilong8810 2012-02-21 02:43:22
各位大大好,本人菜鸟,在第一次看C++ primier 4ed。在书中P157页(对应英文182页)有这样一段话:
当使用非const对象初始化const对象的引用时, 系统将非const对象转化为const对象。此外,还可以将非const对象的地址(或非const指针)转换为指向相关const类型的指针:

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

感觉说明文字的第二句和代码的最后一句不相符,貌似ci已被定义为const类型了,对于这句话好像就没有说服力了。不值如果想要说明这句话,是不是应该将“const int ci=0;”改为“int ci=0;”?
另外,这样的类型转换是否意味着i与ci及直接变为const类型的了?还是在这两句中临时成为const类型的?
...全文
275 12 打赏 收藏 转发到动态 举报
写回复
用AI写文章
12 条回复
切换为时间正序
请发表友善的回复…
发表回复
guobing_ice 2013-05-02
  • 打赏
  • 举报
回复
见C++ primer 第5版相同章节,已经改为const int *p=&i;了 作者想表达的就是非const对象的饮用和指针可以隐式转换为const对象的引用和指针,而反之不可。 PS:搞的我都不想看C++ Primer 第四版了,啥时候搞本第5版。。。
赵4老师 2012-02-21
  • 打赏
  • 举报
回复
不要纠结各种常量了,这个世界上唯一不变的就是变化。用API WriteProcessMemory还能修改正运行的其它进程的内存里面的所谓常量呢!
liuqilong8810 2012-02-21
  • 打赏
  • 举报
回复
[Quote=引用 4 楼 kuzuozhou 的回复:]

const int ci=0;
表示ci是const,而不是表示&ci是const
[/Quote]
问题是,当ci是const变量时,储存它的地址会发生变化吗?
另外,在c++ primier中讲对指向const对象的指针赋值时,都是上面提问中的赋值方式,没有说有发生隐形转换哪?
liuqilong8810 2012-02-21
  • 打赏
  • 举报
回复
[Quote=引用 3 楼 studycbc 的回复:]

引用 2 楼 merlinfang 的回复:
const int *p表示p是const,但是*p不是const


const修饰的对象是有区别的,对2L需要进行纠正。
const int *p 表示 *p是const的,当p进行修改的时候,*p不会改变。
例如:const int *p;p++;输出*p都是同一个值

const int ci;
const int *p =……
[/Quote]

我可能没有明白你的意思。我在VS2010中编写了一下程序:

const int ci[2]={0,1};
const int *p =ci;
cout<<*p<<endl;
p++;
cout<<*p<<endl;
system("pause"); //结果显示了0和1

这是否说明const型的p指针的指向本身可以被修改呢?
pengfoo 2012-02-21
  • 打赏
  • 举报
回复
const int ci=0;
表示ci是const,而不是表示&ci是const
七擒关羽 2012-02-21
  • 打赏
  • 举报
回复
[Quote=引用 2 楼 merlinfang 的回复:]
const int *p表示p是const,但是*p不是const
[/Quote]

const修饰的对象是有区别的,对2L需要进行纠正。
const int *p 表示 *p是const的,当p进行修改的时候,*p不会改变。
例如:const int *p;p++;输出*p都是同一个值

const int ci;
const int *p = &ci;
P++;//非法,地址const不可修改
merlinfang 2012-02-21
  • 打赏
  • 举报
回复
const int *p表示p是const,但是*p不是const
pengzhixi 2012-02-21
  • 打赏
  • 举报
回复
const int*p=&i;这样既可
liang19871005 2012-02-21
  • 打赏
  • 举报
回复
ci 是const的,但它的地址不是
longgang521125 2012-02-21
  • 打赏
  • 举报
回复
LZ啊,这个蛮好理解嘛!
int i;
const int ci=0;
const int &j=i;
const int *p=&ci;
你看&j不可变了,因为是const,这里又将i赋值于他,所以将i也变成const咯!
这里如果const int *p=&i;这里是将i地址复制与p,然而p可改变,*p不可变,
就是说这里i不是const!i是可以改变的!
说的估计有点模糊
lf09121723 2012-02-21
  • 打赏
  • 举报
回复
const int *p //const修饰指向的对象,p可变,p指向的对象不可变

33,311

社区成员

发帖
与我相关
我的任务
社区描述
C/C++ 新手乐园
社区管理员
  • 新手乐园社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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