zoukankan      html  css  js  c++  java
  • 练习6.16、6.17、6.19、6.20

    6.16:下面这个函数虽然合法,但是不算特别有用。指出它的局限性并设法改善。

    bool is_empty(string& s)  {  return s.empty(); }

    Ans:局限性:不能直接传给形参一个字符串字面值,并且函数中并没有修改s,形参应该设置为const引用。

       改善:bool is_empty(const string& s)  {  return s.empty(); }

    6.17:编写一个函数,判断string对象中是否含有大写字母。编写一个函数,把string对象全部都改成小写形式。在这两个函数中你使用的形参类型相同吗?为什么?

    Ans:由于使用的是string对象,前者我形参类型为常量引用,后者为普通引用。由于前者只是判断是否有大写字母,不需要修改string对象,所以使用常量,使用引用是为了避免string对象太长,不利于拷贝,后者使用普通引用是由于要将大写字母转换成小写字母,故不能使用常量引用。

    6.19:假定有如下声明,判断哪个调用合法、哪个调用不合法。对于不合法的函数调用,说明原因。

    double calc(double);

    int count (const string &, char);

    int sum( vector<int>::iterator, vector<int>::iterator, int);

    vector<int> vec(10);

    (a)calc(23.4 , 55.1);  (b) count ("abcda",‘a’ );

    (c)calc(66);      (d)sum(vec.begin() ,vec.end(), 3.8);

    Ans:a)非法调用。函数声明的形参个数只有一个,但是函数调用中却有2个实参,实参与形参要一一对应。

       b)合法。函数调用中第一个实参是字符串常量字面值,第二个实参是一个字符,而函数声明中形参第一个是常量引用,第二个是char类型,一一对应,类型匹配,故合法。

       c)合法。参数个数对应,并且实参是int类型,可以转换成double类型,初始化形参。

       d)合法。参数个数对应,前两个类型匹配,但是最后一个参数,double类型转换成int类型,会出现数据丢失。

    6.20:引用形参什么时候应该是常量引用?如果形参应该是常量引用,而我们将其设为了普通引用,会出现什么情况?

    Ans:当函数中形参参与的操作不需要修改引用类型的形参时,就应该使用常量引用。

    会出现很多的局限性,不能将常量引用作为实参去初始化形参,也不能用字符串字面值去初始化形参,否则编译器会报错。并且也不能将需要类型转换的对象传给形参。

  • 相关阅读:
    基于摸板匹配的目標跟蹤算法
    spoj 2713 Can you answer these queries IV
    zoj 3633 Alice's present
    hdu 3642 Get The Treasury
    poj 1195 Mobile phones
    poj 2760 End of Windless Days
    zoj 3540 Adding New Machine
    spoj 1716 Can you answer these queries III
    spoj 1043 Can you answer these queries I
    spoj 2916 Can you answer these queries V
  • 原文地址:https://www.cnblogs.com/Dark-King/p/9477050.html
Copyright © 2011-2022 走看看