SaDFromSpb
Member | Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору RedLord У нас с тобой просто путанница в понятниях. Цитата: ri = 2; // i стало равно 2 i1 = 5; // i не изменилось. | Код: int i = 4; int& ri = i; // после этого на уровне кода никакой разницы между ri и i заметить не удастся (если удается - напиши как) ri = 45; cout << i << endl; // выводится 45. Проверь. | Цитата: при push_back копирование идеть по значению: int i = 1; vec.push_beck(i); | Полностью согласен. Идет копирование по значению, то есть, внутри метода push_back создается копия содержимого i. Когда объявление int i = 4; переводится на уровень машинных кодов, то i переводится в адрес места в памяти, где хранится значение int. Любой адрес - это и есть ссылка на отрезок памяти. Другого способа хранения одиночных переменных нет. Если мы пишем int* i = new int(4);, то i переводится в адрес места памяти, где хранится адрес другого места в памяти, где уже хранится четверка. С этой точки зрения i в обоих случаях - прежде всего обычная переменная, просто в первом случае она хранит значение 4, а в другом случае она хранит адресс (который по сути тоже принадлежит к типу unsigned int (для 32-х разрядной платформы) ). Для простоты понимания мы привыкли считать, что для выражения int i=4; верно, что в i просто содержится значение 4, хотя прежде всего i - это адрес (то есть ссылка на отрезок памяти), который можно узнать, написав cout << &i ; . Здесь я коротко изложил свое представление. И я не утверждаю, что оно верное. И вообще, мне действительно стоило перечитать про это у Страуструпа, прежде чем все это накалякать, просто времени не хвататет. Добавлено: Следовательно, когда я говорю, что контейнеры расчитаны на хранение ссылочных типов, и когда ты говоришь, что они рассчитаны на хранение значений, то мы оба имеем ввиду одно и тоже. Добавлено: Еще могу добавить: Код: int i = 4; int& ri = i; cout << &i << endl; cout << &ri << endl; //два раза выведется один и тот же адрес. |
| Всего записей: 209 | Зарегистр. 22-06-2004 | Отправлено: 16:00 25-05-2006 | Исправлено: SaDFromSpb, 16:16 25-05-2006 |
|