我仍然对返回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对象没有被破坏。我是对的吗?
答案 0 :(得分:0)
是的,您的理解听起来是正确的。
dataReceivedCpy = t.GetData();
调用复制赋值运算符,将t.dataA
的副本放入dataReceivedCpy
。
const A& dataReceivedRef = t.GetData();
不进行复制,并使dataReceivedRef
成为对t.dataA
的引用。它在t
的生命周期内有效。