Рассмотрим следующий пример класса, взятый из Бьярн Страуструп - Обзор C ++ (2-е издание) :
class Vector {
public:
Vector(int s) :elem{new double[s]}, sz{s} { }
double& operator[](int i) { return elem[i]; }
int size() { return sz; }
private:
double* elem;
int sz = 0;
};
Насколько я понимаю, в double& operator[]
теле метода, elem[i]
(что совпадает с elem + i
) имеет тип указателя на удвоение double*
.
Итак, вопрос в том, почему правильно возвращать указатель на удвоение хотя сигнатура метода подразумевает ссылку на двойную (саму переменную) для возврата?
Кроме того, компилятор выдает ошибку, если я попытался вернуть разыменованную *elem[i]
вместо elem[i]
.