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

问题描述 投票:2回答:2

这是您如何返回对索引为i的动态分配数组的元素的引用吗?

    int& dynamic_array::operator[](unsigned int i) {
    if (i >= get_size())
        throw exception(SUBSCRIPT_RANGE_EXCEPTION);
    else
        return array[i];
}
c++ reference dynamic-memory-allocation
2个回答
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 <>)


-1
投票

[是的,这是正确的–亚历山大·希申科

谢谢

© www.soinside.com 2019 - 2024. All rights reserved.