练习2.15
下面那个定义是不合法的?为什么?
(a) int ival = 1.01;
(b) int &rval1 = 1.01;
(c) int &rval2 = ival;
(d) int &rval3;
解答:
(a) 合法,直接赋值。
(b) 非法,绑定的必须是一个左值。在C++11中,int &&rval1 = 1.01;这样是可以的,绑定一个右值。
(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) r2 = 3.14159; 合法,等价与d=3.14159
(b) r2 = r1; 合法,等价与d = i
(c) i = r2; 合法,等价与i = d
(d) r1 = d; 合法,等价与i = d
练习2.17
执行下面的代码段将输出什么结果?
int i, &ri = i;
i = 5;ri = 10;
std::cout << i << " " << ri << std::endl;
解答:
打印结果:10 10