gpt4 book ai didi

c++ - 数组访问运算符重载的返回类型

转载 作者:太空宇宙 更新时间:2023-11-03 10:39:48 25 4
gpt4 key购买 nike

我有一个类 Foo,它管理另一个类 Bar 的对象集合。管理类有一个方法 Bar *Foo::at( int index ) 来访问集合中的对象,所以我可以做类似 myfoo->at(2)->barmethod 的事情(),说。现在我想知道是否可以重载 Foo::operator[] 以返回 Bar*,这样我就可以执行 myfoo[2]->barmethod() 代替。编译器不喜欢那样。运算符的返回类型是否一定需要是对其所属类的引用?

这是一些代码。第一个有效,第二个无效。

Foo::Bar *Foo::at( size_t index )
{
return index < m_count ? m_entry[index] : 0;
}

Foo::Bar *Foo::operator[]( size_t index )
{
return index < m_count ? m_entry[index] : 0;
}

来自标题:

class Foo
{
public:

class Bar
{
...
};

size_t add( UINT8 addr, UINT8 type, UINT8 opt, UINT8 rev );
Bar *at( size_t index );
Bar *operator[]( size_t index );
....

protected:

Bar **m_entry; // array of entry pointers
size_t m_size;
size_t m_count;

};

这是编译器不喜欢的代码(使用 [ ] 时):

Foo *myfoo;
...
myfoo[i]->barmethod();

现在在写这篇文章时,我明白了问题所在。我在指向 Foo 的指针上使用 [],而不是在实际的 Foo 上。所以如果我取消引用它,它应该可以工作。编译错误完全正确:

错误:“->”的基操作数具有非指针类型“Foo”

呃。好的,抱歉这个愚蠢的问题。感谢您的建议。

最佳答案

Does the return type of the operator necessarily need to be a reference to the class it is a member of?

您可以通过思考例如std::vector,它的operator [],以及后者的返回类型。

结论是没有这个限制。 operator[] 的唯一限制是:

  • 它必须只有一个参数。
  • 它必须被定义为一个成员函数(它不能是一个命名空间范围的函数)。

关于c++ - 数组访问运算符重载的返回类型,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44370423/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com