一.接收常量型实参
•在C++中,一切常量均带有右值属性
•用内容只读的右值对象初始化目标可写的左值引用,将被编译器以放松类型限定为由予以拒绝
•常引用型的形参因其对目标的只读性约束,满足了编译器类型限定从紧不从松的原则,可以接收常量型的实参
•C++98中只有左值引用没有右值引用,因此只能用常左值引用引用右值,当然常左值引用也能引用常或非常左值,故该引用又被称为万能引用
–int sum (int const& x, int const& y)
{
return x + y;
}
–int a = 20, b = 30, c = sum (10, a - b); // 字面值常量10是纯右值,a - b表达式的值是将亡右值
二.防止对实参的意外修改
•即便所传递的实参不是常量,只要根据设计,函数不需要也不应该对该实参做任何修改,那么接收该实参的形参同样可以被声明为常引用,
这样一方面避免了对象复制的开销,同时一旦做出对实参的意外修改,将直接引发编译错误,将修改实参所带来的风险降到最低
–int sum (int const& x, int const& y)
{
++x; // 错误
y += 100; // 错误
return x + y;
}
–int a = 20, b = 30, c = sum (a, b);