我创建了一个包含整数数组的类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;
}
但是,当我尝试从main调用这两个函数时,即使变量未用作左值,也只访问第一个函数。如果只使用左值函数可以处理所有事情,我就无法为rvalue创建单独的函数。
以下代码是我使用的主要功能(运算符&lt;&lt;适当重载。):
#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
}
有什么方法可以调用右值函数吗?是否还需要为左值和右值定义函数?
答案 0 :(得分:7)
第二个函数是const member function
,如果您有一个const
实例,它将被调用:
const Array array;
cout << array[3] << endl; // rvalue function called
称这些&#34;左值&#34;是不常见的。和&#34; rvalue&#34;功能。如果需要,您可以定义const 1以返回const引用。