2.3.1节练习
练习2.15:下面的哪个定义是不合法的?为什么?
(a) int ival = 1.01; (b) int &rval1 = 1.01;
(c) int &rval2 = ival; (d) int &rval3;
出题思路:本题旨在考查引用的含义,应该明确引用与对象的关系。
解答:
(b)是非法的,引用必须指向一个实际存在的对象而非字面值常量。
(d)是非法的,因为我们无法令引用重新绑定到另外一个对象,所以引用必须初始化。
(a)和(c)是和发的。
练习2.16:考查下面的所有赋值然后回答:哪些赋值是不合法?为什么?哪些赋值是合法的?它们执行了什么样的操作?
int i = 0 &r1 = i; double d = 0 &r2 = d;
(a) r2 = 3.14159; (b) r2 = r1;
(c) i = r2; (d) r1 = d;
出题思路:本题旨在考查引用的含义以及用法,应该明确引用与对象的关系。
解答:
(a)是合法的,为引用赋值实际上是把值赋给了与引用绑定的对象,在这里是把3.14159赋给了变量d。
(b)是合法的,以引用作为初始值实际上是以引用绑定的对象作为初始值,在这里是把i的值赋给了变量d。
(c)是合法的,把d的值赋给了变量i,因为d是双精度浮点数而i是整数,所以该语句实际上执行了窄化操作。
(d)是合法的,把d的值赋给了变量i,与上一条语句一样执行了窄化操作。
练习2.17:执行下面的代码段将输出什么结果?
int i &ri = i;
i = 5; ri = 10;
std::cout << i << " " << ri << std::endl;
出题思路:本题旨在考查引用的含义及用法,应该明确引用与对象的关系。
解答:
程序的输出是10 10。
引用不是对象,它只是为已经存在的对象起了另外一个名字,因此ri实际上是i的别名。在上述程序中,首先将i赋值为5,然后把这个值更新为10。因为ri是i的引用,所以它们的输出结果是一样的。
普通的冒险故事提示您:看后求收藏(卧龙小说网http://www.wolongxs.com),接着再看更方便。
好书推荐:《我的剧本世界在自主运行》、《我是舰娘》、《我的师妹是妖女》、《交错世界之学院都市》、《认清现实后,她们开始追夫火葬场》、《好徒儿你就饶了为师伐》、