这是您如何返回对索引为i的动态分配数组的元素的引用吗?
int& dynamic_array::operator[](unsigned int i) {
if (i >= get_size())
throw exception(SUBSCRIPT_RANGE_EXCEPTION);
else
return array[i];
}
通过尝试以优雅的方式总结评论,您可以使用类似以下内容:
#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 <>)
[是的,这是正确的–亚历山大·希申科
谢谢