矢量容器的运算符 [] - 返回参考?

Posted

技术标签:

【中文标题】矢量容器的运算符 [] - 返回参考?【英文标题】:operator[] of vector container - return reference? 【发布时间】:2016-02-22 23:03:57 【问题描述】:

我创建了一个名为 CardDeck (c++) 的类,它有 vector<card*> deck 私有成员。

我像这样将 operator[] 重载到这个类:

Card* CardDeck::operator[](int i) const
return this->deck[i];

您可以看到它返回 Card* 而不是 Card* &。但是,当我尝试放置 Card*& 时,它没有编译,但根据我的理解,vector[i] 返回第 i 个元素 reference - 就像写成 here。

那么为什么它会像这样编译而不是使用 Card* & 呢?

【问题讨论】:

编译器给你什么错误信息? 【参考方案1】:

您不能从const 成员函数返回非const 引用,因为它允许调用者修改对象。只需返回Card* 的副本,就像您的示例一样,或者如果您想允许调用者修改指针,请不要将您的函数标记为const

另外请注意,如果您希望能够从 const 上下文访问值并从非const 上下文修改它们,您可以同时拥有这两者:

Card* CardDeck::operator[]( int i ) const;
Card*& CardDeck::operator[]( int i );

【讨论】:

...并注意修改vector中的指针与通过指针修改卡片是不同的! 我会在 const 版本中将其设为 Card const*。不希望在 const 函数中修改您的内部结构。

以上是关于矢量容器的运算符 [] - 返回参考?的主要内容,如果未能解决你的问题,请参考以下文章

在访问该类的函数时,如何在我的类的 2D 矢量上使用点运算符?

Python基础知识—容器类型

GLM + STL:运算符 == 缺失

模运算矢量化

Day719. 矢量运算 -Java8后最重要新特性

矢量运算_向量积