позвольте мне сначала сказать. Я знаю, что заголовок подозревает, что я задаю вопрос, на который много раз отвечали здесь и в Интернете. Я действительно провел исследование, но я просто не могу найти удовлетворительный ответ.
Мой вопрос в конце сводится к этому. Почему вызов Java по значению и вызов С++ по ссылке (при использовании указателей)?
Рассмотрим вызов метода в Java при передаче ссылок и в C++ при передаче указателей. В конце концов, в обоих случаях я могу вносить изменения, которые видны вызывающему абоненту. Также в обоих случаях я передаю адрес объекта в функцию. На самом деле я копирую, то есть делаю вызов по значению в С++ тоже при передаче указателя, не так ли?
Вы можете просто проверить это обстоятельство, запустив следующий код:
#include <iostream>
void modify (int *i) {
int a = 5;
i = &a;
}
int main () {
int b;
int *i = &b;
std::cout << i << std::endl;
modify(i);
std::cout << i << std::endl;
return 0;
}
Который будет печатать два раза один и тот же адрес.
Для меня просто недостаточно оправдать вызов по ссылке тем свойством, что с ним можно выполнить функцию подкачки. Я хотел бы знать самую суть того, что делает вызов по ссылке вызовом по ссылке.
Заранее спасибо.