美文网首页
C++函数参数为什么使用const引用

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

作者: dnsir | 来源:发表于2018-11-28 22:03 被阅读2次

    1 引言

    seastar的commit log中可以看到

    template<typename T>
    - 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 <iostream>
    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引用

          本文链接:https://www.haomeiwen.com/subject/exrtcqtx.html