C++函数参数为什么使用const引用

1 引言

seastar的commit log中可以看到

template
- void do_not_optimize(T& v)
+ void do_not_optimize(const T& v)
{
    asm volatile("" : : "r,m" (v));
}

就是讲函数参数从引用类型变为const引用类型,commit的备注为:

To allow passing temporaries

2 总结

const引用是个万能引用,const引用可以绑定到不同但相关类型的对象或绑定到左值,const引用可以初始化为不同类型的对象或者初始化为右值,普通的const引用则只能绑定到与该引用同类型的对象。

3 举个例子

#include 
class Foo {
public:
    Foo() {}
    ~Foo() {}
    int a;
};
void do_not_optimize(Foo &v)
{
    std::cout << v.a << std::endl;
}
void do_not_optimize2(const Foo &v)
{
    std::cout << v.a << std::endl;
}
int main()
{
    const int& a = 10; //编译通过
    // int &b = 20; //,编译错误,字面常量是右值
    // do_not_optimize(Foo()); //compile error,函数返回值是临时变量,是右值
    do_not_optimize2(Foo());
    return 0;
}

所以这也是告诉我们函数在设计参数时,根据情况使用const &const类型。

你可能感兴趣的:(C++函数参数为什么使用const引用)