2.3.1节练习

作者:源力解离 更新时间:2018/2/27 14:31:37 字数:686

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的引用,所以它们的输出结果是一样的。


设置
阅读主题:
字体大小:
字体格式:
简体 繁体
页面宽度:
手机阅读
菠萝包轻小说

iOS版APP
安卓版APP

扫一扫下载