定义函数返回对类成员的const引用和变量的副本

时间:2016-08-08 14:00:32

标签: c++11 const-reference

我仍然对返回const引用感到困惑。可能已经讨论过这个问题了,但是我没有找到相同的代码:

#include <vector>
#include <iostream>

struct A
{
    int dataSize;
    std::vector<char> data;
};

class T
{
public:
    T();
    ~T();
    const A& GetData();
private:
    A dataA;
};

T::T() : dataA{1}
{
}

T::~T()
{
}

const A& T::GetData()
{
    return dataA;
}

void main()
{
    T t;
    A dataReceivedCpy = {};
    dataReceivedCpy = t.GetData();

    const A& dataReceivedRef = t.GetData();
    std::cout << dataReceivedRef.dataSize << std::endl;
}

当我打电话

时究竟发生了什么
dataReceivedCpy = t.GetData();

这是对的吗?从我的角度来看,它是和所请求的结构的副本,我是对的吗?

另一方面,

const A& dataReceivedRef = t.GetData();

返回对象成员的引用,它是正确的,除非T对象没有被破坏。我是对的吗?

1 个答案:

答案 0 :(得分:0)

是的,您的理解听起来是正确的。

dataReceivedCpy = t.GetData();

调用复制赋值运算符,将t.dataA的副本放入dataReceivedCpy

const A& dataReceivedRef = t.GetData();

不进行复制,并使dataReceivedRef成为对t.dataA的引用。它在t的生命周期内有效。