template <typename T>
void func(T& arg) {
...
}
上面这个模版,传入正常左值的时候,ok,没有问题。
传入非const右值,报错。
note: 非常量引用只能绑定到左值
传入const右值,不报错。
std::string getstr() {
return "this is";
}
int main()
{
const std::string a = "s";
func(a); //ok
func(getstr()); //error
return 0;
}
延伸开来
std::string const & crs1 = std::string();
常量引用会延长右值的生命周期
非const引用不能绑定到左值还比较好理解,不过const能绑定就比较不清楚,后来看到在知乎上有个回答
https://www.zhihu.com/question/40238995
解释得比较明白。
1是让传引用和传值成为函数本身的细节,调用者本身不用去关心。因为加上了const之后,无论是传值还是引用都不会影响结果,因为const就不能进行修改了。
2据说是为了调用fortran函数?