1、
习题参考:
6.14 举一个形参应该是引用类型的例子,再举一个形参不能是引用类型的例子。
答:
形参使用引用类型的情况:(1)避免拷贝传递大对象的时候,这里的string对象s;(2)当需要从函数内部返回值的时候
string::size_type find_char(const string &s,char c,string::size_type &occurs)
{
auto ret = s.size();
occurs = 0;
for (decltype(ret) i = 0; i != s.size(); ++i){
if (s[i] == c){
if (ret == s.size()){
ret = i;
}
++occurs;
}
}
return ret;
}
形参不能使用引用类型的情况:
2、顶层const作用于对象本身
const int ci = 42; // 不能改变ci,const是顶层的
int i = ci; //正确:当拷贝ci时,忽略了它的顶层const
int * const p = &i; //const是顶层的,不能改变p的值
*p = 0; //正确,通过p改变其指向的对象的值是允许的
当用实参初始化形参的时候会忽略掉顶层const。
void fcn(const int i)
{
/* fcn can read but not write to i */
}
void fcn(int i) // error: redefines fcn(int)
{
/* ... */
}
3、顶层const和底层const
顶层const:表示指针本身是一个常量;
底层const:表示指针所指的对象是一个常量。