好的,所以这是我的第一篇文章和/或问题,这是一个项目,所以我对过于教育的答案完全没问题。
我有一个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的地址。
答案 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;
这样可以正常工作。