《C++ Primer》第4章 4.11节习题答案

《C++ Primer》第4章 表达式

4.11节 类型转换

练习4.34:根据本节给出的变量定义,说明在下面的表达式中将发生什么样的类型转换。
(a) if  (fval) (b)dval = fval + ival;  (c)dval + ival *cval;
需要注意每种运算符遵循的是左结合律还是右结合律。
【出题思路】
读者需要掌握算术转换的规则。
【解答】
(a)if语句的条件应该是布尔值,因此float型变量fval自动转换成布尔值,转换规则是所有非0值转换为true,0转换为false。
(b)ival转换成float,与fval求和后所得的结果进一步转换为double类型。
(c)cval执行整型提升转换为int,与ival相乘后所得的结果转换为double类型,最后再与dval相加。

练习4.35:假设有如下的定义,
char cval;            int ival;        unsigned int ui;
float fval;            double dval;
请回答,在下面的表达式中发生了隐式类型转换吗?如果有,指出来。
(a)cval = 'a' + 3;                (b)fval = ui - ival * 1.0;
(c)dval = ui * fval;            (d)cval = ival + fval + dval;
【出题思路】
读者需要掌握算术转换的规则。
【解答】
(a)字符'a'提升为int,与3相加所得的结果再转换为char并赋给cval。
(b)ival转换为double,与1.0相乘的结果也是double类型,ui转换为double类型后与乘法得到的结果相减,最终的结果转换为float并赋给fval。
(c)ui转换为float,与fval相乘的结果转换为double类型并赋给dval。
(d)ival转换为float,与fval相加所得的结果转换为double类型,再与dval相加后结果转换为char类型。

练习4.36:假设i是int类型、d是double类型,书写表达式i*=d使其执行整数类型的乘法而非浮点类型的乘法。
【出题思路】
任何具有明确定义的类型转换,只要不包括底层const,都可以使用static_cast。
【解答】
使用static_cast把double类型的变量d强制转换成int类型,就可以令表达式i*=d执行整数类型的乘法。语句的形式应该是:
i *= static_cast<int>(d);

练习4.37:用命名的强制类型转换改写下列旧式的转换语句。
int i; double d;    const string *ps;     char *pc; void *pv;
(a)pv = (void*)ps;                (b)i = int(*pc);
(c)pv = &d;                        (d)pc = (char*) pv;
【出题思路】
利用static_cast执行强制类型转换,对于底层const则使用const_cast。
【解答】
(a)pv = static_cast<void*>(const_cast<string*>(ps));                
(b)i = static_cast<int>(*pc);
(c)pv = static_cast<void*>(&d);                        
(d)pc = static_cast<char*>(pv);

练习4.38:说明下面这条表达式的含义。
double slope = static_cast<double>(j/i);
【出题思路】
理解命名的强制类型转换。
【解答】
把j/i的值强制类型转换成double,然后赋值给slope。请注意,如果i和j的类型都是int,则j/i的求值结果仍然是int,即使除不尽也只保留商的整数部分,最后再转换成double类型。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值