0

返回一个 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 对象没有被破坏。我对吗?

4

1 回答 1

0

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

dataReceivedCpy = t.GetData();

调用复制赋值运算符来放置t.dataAin的副本dataReceivedCpy

const A& dataReceivedRef = t.GetData();

不复制并dataReceivedRef引用t.dataA. 它在 的生命周期内有效t

于 2016-08-08T14:05:19.400 回答