返回对char数组数组的const引用

时间:2015-01-23 00:21:42

标签: c++ arrays reference

好的,所以这是我的第一篇文章和/或问题,这是一个项目,所以我对过于教育的答案完全没问题。

我有一个char数组数组,声明如下:

CharArray *m_CharArrayArray;

我无法编译的唯一函数(来自提供的抽象类)如下:

virtual CharArray * const &at(size_t index) const = 0;

我已经获得了以下函数来编译并尝试编辑工作模型...

virtual CharArray * const &at(size_t index) const {
return m_CharArrayArray;
};

我尝试了多个行内返回值,因为我的" iterator"在const函数中不可用。顺便说一句,如果有人可以详细说明函数头之前和之后的const表达式之间的具体区别,那就太棒了!

return m_CharArrayArray + index;

产量

error: returning reference to temporary 

return m_CharArrayArray[index];

产量

error: invalid initialization of reference of type ‘CharArray* const&’ from expression of type ‘CharArray’

我还尝试了在返回值之前具有指针和参考符号的多个其他变体。那我在这里错过了什么?我认为返回引用只是一个地址,并将index的值添加到该地址将产生所需CharArray的地址。

1 个答案:

答案 0 :(得分:0)

您需要了解函数的返回类型。

virtual CharArray * const &at(size_t index) const = 0;

返回此类型:

CharArray * const &

大声读出该类型需要您从右向左扫描。

  

引用 const指针CharArray

这是两个间接层面,对吧? 东西到某事 - 否则对某事 -

这是你的问题。

return m_CharArrayArray + index;

该添加操作会创建一个新的临时指针。然后你就会返回对那个临时的引用。如果你在网上搜索" returning a reference to a temporary" ...哇。

事实证明,您的参考不仅仅是错误的来源。它永远不需要。

virtual CharArray * const at(size_t index) const = 0;

这样可以正常工作。