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

时间:2016-01-16 02:59:20

标签: c++ reference dynamic-memory-allocation

这是如何返回对索引为i ??

的动态分配数组元素的引用
    int& dynamic_array::operator[](unsigned int i) {
    if (i >= get_size())
        throw exception(SUBSCRIPT_RANGE_EXCEPTION);
    else
        return array[i];
}

2 个答案:

答案 0 :(得分:0)

是的,这是正确的 - Alexander Shishenko

由于

答案 1 :(得分:0)

通过尝试以一种优雅的方式总结评论,您可以使用类似的内容:

#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];
}

a。 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 <>)