關於返回const value和const reference value

最近對公司代碼進行優化時發現很多類似下面的代碼:

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。

這裏寫出來只是希望注意一下

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章