在 C++ 中返回对动态数组元素的引用?

Posted

技术标签:

【中文标题】在 C++ 中返回对动态数组元素的引用?【英文标题】:return reference to element of dynamic array in C++? 【发布时间】:2016-04-21 18:08:31 【问题描述】:

这就是你返回对索引为 i 的动态分配数组元素的引用的方式吗??

    int& dynamic_array::operator[](unsigned int i) 
    if (i >= get_size())
        throw exception(SUBSCRIPT_RANGE_EXCEPTION);
    else
        return array[i];

【问题讨论】:

是的,没错 要使其能够用于const 对象,您需要添加const 重载。 else 也是多余的,因为 throw 在该点中止执行流程。 考虑使用 std::out_of_range 而不是 std::exception 【参考方案1】:

通过尝试以优雅的方式对 cme​​ts 进行总结,您可以使用以下内容:

#include <stdexcept>
#include <string>

int& dynamic_array::operator[](size_t index)

    if (index >= size)
        throw std::out_of_range"Index too large " + std::to_string(index);
    return elements[index];

一个。 size_t 确保 0 或正索引

b. out_of_range 是我们在这些情况下除外的标准例外

c。异常消息信息丰富

如果我们想更进一步,您通常也需要 const 和非 const 版本。为了避免代码重复,你这样移动:

#include <stdexcept>
#include <string>
#include <utility>

const int& dynamic_array::operator[](size_t index) const

    if (index >= size)
        throw std::out_of_range"Index too large " + std::to_string(index);
    return elements[index];


int& dynamic_array::operator[](size_t index)

    return const_cast<int&>(std::as_const(*this)[index]);

(std:as_const() 属于 C++17 否则考虑 static_cast)

【讨论】:

以上是关于在 C++ 中返回对动态数组元素的引用?的主要内容,如果未能解决你的问题,请参考以下文章

C++容器

输出没有重复元素的动态数组(缩小数组)C++

如何在 C++ 中分配一个大的动态数组?

在 Swig 中通过 ref 返回动态数组

如何为 c++ 的不同变量类型的结构元素创建动态数组?

Java中一维,二维数组的静态和动态初始化