关于网友提出的“ 我的两个关于const限定修饰符的问题”问题疑问,本网通过在网上对“ 我的两个关于const限定修饰符的问题”有关的相关答案进行了整理,供用户进行参考,详细问题解答如下:
问题: 我的两个关于const限定修饰符的问题
描述: 我看的是C++ primer 3e 在3.5节的习题中我遇到了两个问题.希望大家能帮我解决.谢谢!
1.习题3.17
下列那些初始化是正确的? 为什么?
A. int i = -1;
B. const int ic = i;
C. const int *pic = ⁣
D. int *const cpi = ⁣
E. const int *const cpic = ⁣
在这几个答案中我认为都是正确的.但在C++ primer answer book 却说D是错误的他的解释是这样的:不合法. cpi 是一个常量指针,指向int,但ic却是个const int.
但是我认为虽然cpi 是一个常量指针,但它也能够指向一个常量整型对象.我的根据是在C++ primer 3e 中有这么一句话:我们可以定义一个const指针指向一个const或一个非const对象.我现在都搞糊涂啦,我应该相信谁呢?
第二个问题是:
习题3.18
根据上个练习,下列那些赋值是正确的? 为什么?
a. i = ic; b. pic = ⁣
c. cpi = pic; d. pic = cpic;
e. cpic = ⁣ f. ic = *cpic;
这个问题我能解答,但是在看C++ primer 3e answer book 的解释的时候又让我糊涂啦
他在解释b的时候是这么说的: 合法.pic不是常量,所以它可以被修改,不过它所指的对象的类型必须是const int.
在解释d的时候是这么说的: 合法.pic不是常量,所以它可以被修改,不过它所指的对象的类型必须是const int.
它一定要指向一个const int吗?
解决方案1: A. int i = -1;
B. const int ic = i;
C. const int *pic = ⁣
D. int *const cpi = ⁣
E. const int *const cpic = ⁣
D错:因为:&ic == const int *temp; 而不能将temp赋给cpi;即不能将一个 指向const int的指针赋给一个指向 non-const int的指针,这样会将const修饰丢失.等同于这类错误: const j = 0;int i = j; cpi是const指针,意思是它必须在定义时被初始化,初始化之后就不能再被赋值.即改变它的指向.
2.b. pic = ⁣
d. pic = cpic;
b对;因为:pic本身不是const的,所以它可以做为一个左值,即可以在等号左边,又因为pic指向一个const int,而pic所指向的值在这里并没有被改变.
d对:道理同上,不同的是,这里cpic是一个const指针,但它在等号右边,不是左边,所以不会出错.
pic它一定要指向一个const int吗?
对.但不等于说,不能将一个non-const int的地址赋给pic.比如:
pic = &i; 这里i 是 non-const int;
不过,当pic指向i之后,不能通过pic来修改i的值.
即:*pic = 9;是错的.
解决方案2: 1,第一个问题D是不合法的,因为cpi指向的是一个整数变量,一次通过
*cpi=...可以更改所指变量的值;而它指向的却是一个整数常量,如果合法
则意味着可以通过cpi非法的改变常量ic的值
这里的问题是这样的,“cpi 是一个常量指针”意味着cpi指向的地址,即指向的对象不能够更改,但是你可以更改它指向对象的内容
以上介绍了“ 我的两个关于const限定修饰符的问题”的问题解答,希望对有需要的网友有所帮助。
本文网址链接:http://www.codes51.com/itwd/3372410.html