练习6.16
当实参是一个字符串字面值的时候,不能初始化一个普通的字符串形参,因此在函数的形参里面加一个顶层const,传给它常量对象或者是非常量对象都是可以的,更改后的代码如下所示:
bool is_empty1(const string& s) {
return s.empty();
}
练习6.17
第一个函数的形参是const string,因此字符串的值不需要改变,仅仅是检查含有大写字母。而第二个函数的形参类型是string &,因为在走遍s的每一个字符的时候,引用的值需要得到改变,如果i是大写字母,输出对应的小写字母,否则原样输出i。
bool is_supper(const string &s) { //确定string中是否含有大写字母
bool a = 0;
for (auto i : s) //走遍s中的每一个字符
{
if (isupper(i) == 1) //如果出现大写字母
a = 1; //bool值为真
}
return a;
}
string to_lower(string& s) //string对象全部改成小写形式的函数
{
for (auto &i : s)
i = tolower(i); //如果i是大写字母,输出对应的小写字母,否则原样输出i
return s;
}
int main() {
string s = "bAc";
string b = "ccc";
cout << is_supper(s) << endl; //1
cout << is_supper(b) << endl; //0
cout << to_lower(s) << endl; //bac
cout << to_lower(b) << endl; //ccc
return 0;
}
练习6.18
可能是比较两个matrix类的大小,返回布尔值。加上const的原因是不能将数组的数组的内容拷贝给其他数组的数组作为其初始值,也不能用数组的数组为其他数组的数组赋值。
bool compare(const matrix& , const matrix& );
可能是把整数的值赋给迭代器所代表的元素。至于为什么返回迭代器我就不知道了。
vector<int>::iterator change_val(int, vector<int>::iterator);
练习6.19
- 不合法,仅有1个形参,但调用时,有2个实参。
- 合法。
- 合法,int类型转换成double类型。
- 3.8是小数,转换成整数可能有面临数据丢失的问题。
练习6.20
- 如果函数无须改变引用形参的值,将其声明为常量引用。
- 如果实参是普通的,那没有关系,但如果实参是常量对象,而形参是普通引用,将引发错误。
如有错误之处,欢迎指正!