c++ templates学习杂记

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函数?

©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容