gpt4 book ai didi

C++——为什么不返回 Array1D&?

转载 作者:太空宇宙 更新时间:2023-11-03 10:21:00 25 4
gpt4 key购买 nike

template<class T>
class Array2D {
public:
class Array1D {
public:
T& operator[](int index);
const T& operator[](int index) const;
...
};

Array1D operator[](int index); // why not return Array1D&
const Array1D operator[](int index) const; // why not return Array1D&
...
};

以上代码用于模拟一个二维数组,类名为Array2D。问题来了,为什么我们应该返回 Array1D 而不是 Array1D&?

谢谢

最佳答案

这真的取决于 Array1D 和 Array2D 的细节。以下是使返回拷贝(而不是引用)变得重要的原因。

假设Array1D(我们称这些行)只是一对指向数据的指针,以及表示数据大小的整数。复制那对不是问题(就像返回引用一样快)。现在,假设 Array2D(我们称之为表)将这些行(轻量对)保存在一个 vector 中。返回对 Row 的引用实际上会返回指向 Table vector 中元素的指针。如果您保存该引用,然后添加更多行,则 vector 可能会重新分配并且您的引用将不再有效。但是 Rows 中的数据没有移动,所以如果您有该 Row 的拷贝(指针加上大小),您仍然可以安全地访问它。

另一方面,如果 Array1D 是一个 vector ,例如,具有昂贵的拷贝,那么按值返回它似乎是一个明显的坏主意。

最后,无论是谁编写了该代码,假设按值返回是有意的,都应该添加注释来解释它:)

关于C++——为什么不返回 Array1D&?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5241840/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com