关于返回const value和const reference value

来源:互联网 发布:我的淘宝显示新开店铺 编辑:程序博客网 时间:2024/05/19 19:33

最近对公司代码进行优化时发现很多类似下面的代码:

class A
{
public:
    A()
    {
        cout<<"construct A"<<endl;
    }
    A(const A& a)
    {
        cout<<"copy construct A"<<endl;
    }
    int aa;
};
class B
{
private:
    A a;
public:
    const A GetA()
    {
        return a;
    }
};

GetA返回的一个const A的值,而代码中经常出现以下测试代码的调用

int main()

{

B b;
cout<<b.GetA().aa<<endl;

return 0;

}

输出打印:

construct A
copy construct A
2009095316

 

而如果把 const A GetA()改为const A& GetA()

输出打印:

construct A
2009091650

很明显,少调用了一次拷贝构造函数,如果A是内置类型或者stl中的迭代器还好,而如果A是个非常复杂的数据结构,这样就非常的划不来了。

这种问题说出来其实大家都知道,但是每次自己写的时候或者使用接口的时候未必会注意,当然我这里只是针对的const value,如果想知道value可以看efffective c++中的条款21。

这里写出来只是希望注意一下

 

原创粉丝点击