C ++运算符重载[]用于左值和右值

我做了一个包含整数数组的类Array。 从主函数中,我试图在Array中使用[]获取数组元素,就像我们在main中声明的数组一样。 我像下面的代码那样重载了operator []; 第一个函数返回一个左值并且第二个右值(构造函数和其他成员函数未显示)。

#include <iostream>
using namespace std;

class Array {
public:
   int& operator[] (const int index)
   {
      return a[index];
   }
   int operator[] (const int index) const
   {
      return a[index];
   }

private:
   int* a;
}

但是,当我尝试从main调用这两个函数时,即使该变量未用作左值,也只能访问第一个函数。 如果仅仅通过使用左值函数就可以处理所有事情,我就无法看到为右值创建单独的函数。

以下代码是我使用的主要函数(运算符<<被适当地重载)。

#include "array.h"
#include <iostream>
using namespace std;

int main() {
   Array array;
   array[3] = 5;                // lvalue function called
   cout << array[3] << endl;    // lvalue function called
   array[4] = array[3]          // lvalue function called for both
}

有什么办法可以调用右值函数吗? 是否有必要为左值和右值定义函数?


第二个函数是一个const member function ,如果你有一个const实例,它将被调用:

const Array array;
cout << array[3] << endl;  // rvalue function called

调用这些“左值”和“右值”函数并不常见。 如果需要,你可以定义const返回一个const引用。

链接地址: http://www.djcxy.com/p/40295.html

上一篇: C++ Operator Overloading [ ] for lvalue and rvalue

下一篇: Function that accepts both lvalue and rvalue arguments