rvalue和左值案例的[]运算符的两个版本

时间:2014-07-11 09:33:42

标签: c++ operator-overloading

我已经实现了int的集合。我想要[]运算符的版本:

  1. 返回int时需要rvalue的用户。例如,当用户尝试读取集合中的给定位置时。如果此位置上的元素不存在,则应抛出异常。
  2. 返回在预期int&时使用的lvalue,用于在给定位置存储值。如果此位置的元素不存在,则函数应为其分配空间。
  3. 这样做的惯用方法是什么?

3 个答案:

答案 0 :(得分:2)

我不明白为什么你需要它 - AFAIK,左值可以转换为右值,所以一个int& operator[]就足够了。

不可能有两个具有相同名称和相同参数列表的函数,即使它们具有不同的返回类型。

如果您确实需要两种方法,可以在其中一个应用程序中使用operator()

答案 1 :(得分:0)

您需要一个实现分配和转换的辅助类型

答案 2 :(得分:0)

这是不可能的,因为C ++中的任何表达式都必须依靠它自己的优点,它不会根据它所使用的上下文来改变它的类型或属性。

因此,如果有人写yourobject[5],那么无论是否继续将其作为更大表达式的一部分进行分配,这必须解决相同的问题。