2.15:下面的哪个定义是不合法的?为什么?
(a)int ival=1.01; (b)int &rvall=1.01;
(c)int &rval2=ival; (d)int &rval3;
a)合法。但是会出现警告;
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)合法。它将3.14159赋值给引用r2,实际上是对变量d进行赋值;
b)合法。r1是int类型i的引用,而r2是double类型的引用,会出现警告。
c)合法。i是int类型,引用r2是double类型,执行了窄化操作。
d)合法。与c)一样。
2.17:执行下面的代码段将输出什么结果?
int i,&ri=i;
i=5; ri=10;
std::cout<<i<<" "<<ri<<std::endl;
输出结果:10 10