6.2.3 const形参和实参

练习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. 不合法,仅有1个形参,但调用时,有2个实参。
  2. 合法。
  3. 合法,int类型转换成double类型。
  4. 3.8是小数,转换成整数可能有面临数据丢失的问题。

练习6.20

  1. 如果函数无须改变引用形参的值,将其声明为常量引用。
  2. 如果实参是普通的,那没有关系,但如果实参是常量对象,而形参是普通引用,将引发错误。

如有错误之处,欢迎指正!

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值