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

Hel*_*ing 2 c++ overloading rvalue lvalue operator-keyword

我创建了一个包含整数数组的类Array.从main函数,我正在尝试使用[]获取Array中的数组元素,就像在main中声明的数组一样.我重载了运算符[],如下面的代码所示; 第一个函数返回一个左值,第二个函数返回一个右值(未显示构造函数和其他成员函数.)

#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;
}
Run Code Online (Sandbox Code Playgroud)

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

以下代码是我使用的主要功能(Operator <<适当重载.):

#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
}
Run Code Online (Sandbox Code Playgroud)

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

Joh*_*nck 7

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

const Array array;
cout << array[3] << endl;  // rvalue function called
Run Code Online (Sandbox Code Playgroud)

称这些"左值"和"左值"函数是不常见的.如果需要,您可以定义const one以返回const引用.