为啥函数参数为非const引用不会发生类型转换
为什么函数参数为非const引用不会发生类型转换void uppercasify(string& str) //把str中所有的字符改成大
为什么函数参数为非const引用不会发生类型转换
void uppercasify(string& str) //把str中所有的字符改成大写
{
for (string::size_type index = 0; index != str.size();
++index)
cout<<toupper(str[index]);
}
int main()
{
char subtleBookPlug[] = "Effective C++";
uppercasify(subtleBookPlug);
return 0;
}
想不明白,
[解决办法]如果输入的是const引用,const代表的是“不会被修改”,不会被修改也就等于没有输出,因此输入字符数组可以转换为一个临时的字符串再提供const引用,因为“转换得到的这个临时变量在函数退出时直接销毁就行,不会有任何问题”
但如果输入的不是const引用,那就代表“会被修改”,也就等于有输出,那么字符数组是可以转换为字符串,但这个临时字符串在函数结束后该怎么办?你说它没有意义可以销毁,你怎么告诉编译器?编译器不知道,它就报错,说这里不合理不应该你写错了。
[解决办法]因为在你的例子中,从char*到string的隐式转换的结果是右值,而左值引用是不能引用右值的,于是在C++03中,就需要使用const的引用了。
[解决办法]被修改的临时变量不被保存到一个确定的变量中,修改就毫无价值,编译器是这么认为的
这种情况下就应该使用const,告诉编译器“这个临时变量不可修改因此可以随便销毁”
当然这都是简单的理解方式,标准规定看4楼