卧龙小说网> > > 2.3.1节练习

2.3.1节练习

2.3.1节练习

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),接着再看更方便。

好书推荐:《我的剧本世界在自主运行》《我是舰娘》《我的师妹是妖女》《交错世界之学院都市》《认清现实后,她们开始追夫火葬场》《好徒儿你就饶了为师伐》

目录