Как работают ссылочные типы, когда они используются как l-значения? Я имею в виду, каков порядок, в котором все делается в такой функции, чтобы возвращаемая переменная получала новое значение и как она отличается от того, что происходит в нормальной функции r-значения?
Например, в следующем фрагменте кода,
double& matrix::operator()(int i, int j) const //parenthesis operator
{
if (!validdex(*this,i,j)) throw(-23); //index out of bounds
return mat[(i-1)*ncols+(j-1)]; //A(i,j)=mat[(i-1)*ncols+(j-1)]
}
который используется для переполнения круглых скобок для экземпляров класса с именем matrix (validdex chacks, если k является допустимым индексом для матрицы), мне нужно знать, как способ обработки функции (оператор paranthesis в этом случае) различается, когда он используется как r-значение (для получения mat[(i-1)*ncols+(j-1)]
), когда он используется как l-значение (чтобы установить значение mat[(i-1)*ncols+(j-1)]
).
Извините, если вопрос нечеткий или это звучит слишком основательно. Я попытался найти ответ в Интернете, но я не нашел ничего, кроме некоторых очень простых уроков по функциям l-value, только с обратной линией и ничем иным.
Когда функция возвращает ссылку, вы можете думать об этом, как если бы функция возвращала указатель. Функции, возвращающие ссылки, не взаимодействуют каким-либо особым образом с вызывающим кодом. Такое специальное взаимодействие не обязательно использовать выражение вызова функции как lvalue: функция возвращает свой указатель, а затем делает это; Вызывающий код просто использует значение указателя.