C++Primer中文版(第四版)题解整理(15)
时间:2025-04-20
时间:2025-04-20
C++Primer题解
(c)名字catch-22中包含在字母、数字和下划线之外的字符“-”,所以非法。可将其改为:catch_22;。
(d)名字1_or_2非法,因为标识符必须以字母或下划线开头,不能以数字开头。可将其改为:one_or_two;。
习题2.15
下面两个定义是否不同?有何不同?
intmonth=9,day=7;
intmonth=09,day=07;
如果上述定义有错的话,那么应该怎样改正呢?
【解答】
这两个定义不同。前者定义了两个int型变量,初值分别为9和7;后者也定义了两个int型变量,其中day被初始化为八进制值7;而month的初始化有错:试图将month初始化为八进制值09,但八进制数字范围为0~7,所以出错。可将第二个定义改为:
intmonth=011,day=07;
习题2.16
假设calc是一个返回double对象的函数。下面哪些是非法定义?改正所有的非法定义。
(a)intcar=1024,auto=2048;
(b)intival=ival;
(c)std::cin>>intinput_value;
(d)doublesalary=wage=9999.99;
(e)doublecalc=calc();
【解答】
(a)非法:auto是关键字,不能用作变量名。使用另一变量名,如aut即可更正。
(c)非法:>>运算符后面不能进行变量定义。改为:
intinput_value;
std::cin>>input_value;
(d)非法:同一定义语句中不同变量的初始化应分别进行。改为:
doublesalary=9999.99,wage=9999.99;
注意,(b)虽然语法上没有错误,但这个初始化没有实际意义,ival仍是未初始化的。
习题2.17
下列变量的初始值(如果有)是什么?
std::stringglobal_str;
intglobal_int;
intmain()
{