《C++ Primer 4 Answer Book》 整理[5]——第5章 表达式

来源:互联网 发布:刀剑神域轻小说软件 编辑:程序博客网 时间:2024/06/06 05:54

5     表达式

        365.4定义术语“溢出“的含义,并给出导致溢出的三个表达式

        答:溢出即表达式的求值结果超出了其类型的表示范围。

                  如下表达式会导致溢出(假设int类型为16:-32768~32767):

                  2000*1000

                  32766+5

                  3276*20

        

        375.5解释逻辑与操作符、逻辑或操作符以及相等操作符的操作数在什么时候计算。

        答:逻辑与、或操作符采用称为“短路求值“的求值策略,即先计算左操作数,再计算右操作数,且只有当仅靠左操作数的值无法确定该逻辑运算的结果时,才会计算右操作数。

        相等操作符的左右操作数均需进行计算。

        

        385.9假设有下面两个定义:

                  unsignedlong ul1=3,ul2=7;

                  下列表达式的结果是什么:

                  a)ul1&ul2 :3

       b)ul1&&ul2 :true

                  c)ul1|ul2:7

                  d)ul1||ul2:true

 

        395.19假设itervector<string>::iterator类型的变量,指出下面哪些表达式是合法的,并解释这些合法表达式的行为。

                  a)*iter++;合法,返回iter所指向的string对象,并使iter1

                  b)(*iter)++;不合法

                  c)*iter.empty();不合法

                  d)iter->empty();合法,调用iter所指向的string对象的成员函数empty

                  e)++*iter;不合法

                  f)iter++->empty();调用iter所指向的string对象的成员函数empty,并使iter1.

 

        405.33给定下列定义

                  intival;

                  doubledval;

                  conststring *ps;

                  char*pc;

                  void*pv;

                  用命名的强制类型转换符号重写下列语句:

                  a)pv=(void*)ps;

                  b)ival=int(*pc);

                  c)pv=&dval;

                  d)pc=(char*)pv;

                  答:a)pv=static_cast<void*>(const_cast<string*>(ps));

                           b)ival=static_cast<int>(*pc);

                           c)pv=static_cast<void*>(&dval);

                           d)pc=static_cast<char*>(pv);