C++Primer中文版(第四版)题解整理(17)
时间:2025-04-20
时间:2025-04-20
C++Primer题解
<<"is"<<sum<<std::endl;
【解答】不合法。因为变量i具有语句作用域,只能在for语句中使用,输出语句中使用i属非法。
习题2.22
下列程序段虽然合法,但是风格很糟糕。有什么问题呢?怎样改善?
for(inti=0;i<100;++i)
//processi
【解答】
问题主要在于使用了具体值100作为循环上界:100的意义在上下文中没有体现
出来,导致程序的可读性差;若100这个值在程序中出现多次,则当程序的需求发生变化(如将100改变为200)时,对程序代码的修改复杂且易出错,导致程序的可维护性差。
改善方法:设置一个const变量(常量)取代100作为循环上界使用,并为该变量选择有意义的名字。
习题2.23
下列哪些语句合法?对于那些不合法的使用,解释原因。
(a)constintbuf;
(b)intcnt=0;
constintsz=cnt;
(c)cnt++;sz++;
【解答】
(a)不合法。因为定义const变量(常量)时必须进行初始化,而buf没有初始化。
(b)合法。
(c)不合法。因为修改了const变量sz的值。
习题2.24
下列哪些定义是非法的?为什么?如何改正?
(a)intival=1.01;(b)int&rval1=1.01;
(c)int&rval2=ival;(d)constint&rval3=1;
【解答】
(b)非法。
因为rval1是一个非const引用,非const引用不能绑定到右值,而1.01是一个右值。可改正为:
int&rval1=ival;
(假设ival是一个已定义的int变量)。
习题2.25
在习题2.24给出的定义下,下列哪些赋值是非法的?如果赋值合法,解释赋值