Я создал класс Array, который содержит целочисленный массив. Из основной функции я пытаюсь получить элемент массива в массиве с помощью [], как это делается для массивов, объявленных в main. Я перегрузил оператор [], как в следующем коде; первая функция возвращает Левое и второй в RValue (Конструкторы и другие функции-члены не показаны.)Перегрузка оператора C++ [] для lvalue и rvalue
#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;
}
Однако при попытке вызвать эти две функции из главной, только первая функция доступна, даже если переменная не используется как lvalue. Я не вижу смысла создавать отдельную функцию для rvalue, если все можно позаботиться только с помощью функции lvalue.
Следующий код является основной функцией я (оператор < < соответствующим перегружена.):
#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
}
Есть ли способ, я могу вызвать функцию RValue? Нужно ли также определять функции как для lvalue, так и для rvalue?
Операторы, вероятно, должны быть объявлены как возвращающие 'int &' и 'const int &', а не 'Array'. –
Да, вы правы. My bad – HelperKing