6.52:已知有如下声明,

  void manip(int , int);

  double dobj ;

请指出下列调用中每个类型转换的等级(参见6.6.1节,第219页)。

(a)manip( ' a ' , ' z ');  (b)manip(55.4 , dobj)

Ans:a)实参是char类型,而函数形参是int类型,所以类型转换的等级是类型提升实现的匹配。

   b)实参是两个double类型的值,函数形参是int类型,所以类型转换的等级是算术类型转换实现的匹配。

6.53:说明下列每组声明中的第二条语句会产生什么影响,并指出哪些不合法(如果有的话)。

(a)int calc (int & ,int &);

    int calc (const int & ,const int &);

(b)int calc(char * ,char *);

    int calc(const char * ,const char *);

(c)int calc(char *, char*);

    int calc(char *const,char *const);

Ans:a)第二条语句会与第一条语句构成重载函数,若实参是常量,则其会调用第二条语句,因为若形参是常量指针或者引用,那么取决于实参是否是常量而选择调用哪个函数,况且实参传递到形参的对象,会忽略掉顶层const。

   b)第二条语句会与第一条语句构成重载函数,与(a)一样。

   c)声明不合法。重复声明了,两条语句不能构成重载函数,实参传递到形参的对象,会忽略掉顶层const,实际上两个函数声明其实一样,在调用时会进行精确匹配:向实参添加顶层const或者删掉顶层const都属于精确匹配

 posted on 2018-08-17 18:00  linlh  阅读(100)  评论(0编辑  收藏  举报