练习2.15: 下面的那个定义是不合法的?为什么?
(a) int ival = 1.01; (b)int&rvall = 1.01; (c) int &rval12 = ival; (d): int &rval13;
答:(a)合法,但赋值后精度丢失,变成1
(b)不合法,引用需要与一个变量绑定,不能直接赋值
(c)合法
(d)不合法,没有初始化,引用必须要和一个对象绑定
练习 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)合法,r2与d绑定,相当于将d的值修改为3.14159
(b)合法,r1是int 型,r2 是double型,相当于将i的值赋给d,精度不丢失
(c)不合法,double型d赋值给int型I 报错,精度丢失
(d)不合法,高精度赋值给低精度的值,不合法
练习2.17: 执行下面的代码段将输出什么结果?
inti, &ri = i;
i= 5;
ri= 10;
std::cout<< i << " " << ri << std::endl;
答:由于ri和i绑定,因此对ri赋值相当于对i赋值,第一次i赋值为5,第二次ri赋值为10,相当于将i重新赋值,因此输出结果为10 10