![]() |
Модераторы: Daevaorn |
![]() ![]() ![]() |
|
Chaos A.D. |
|
|||
![]() Бывалый ![]() Профиль Группа: Участник Сообщений: 172 Регистрация: 16.1.2005 Где: 09 RUS Репутация: 6 Всего: 7 |
По поводу int &r = 12 - во времена написания статьи я пользовался только компилером Borland C++ 5.6, поэтому там оно работало. Естессно, что Borland-у до стандарта очень далеко...
На счет только снимает, но не устанавливает константность: Eсли ты выполнишь
Это сообщение отредактировал(а) Chaos A.D. - 3.8.2005, 14:17 --------------------
Надо смеяться над тем, что тебя мучит, иначе не сохранишь равновесия, иначе мир сведет тебя с ума...Ken Kesey - One Flew Over The Cocoo's Nest |
|||
|
||||
LPBOY |
|
|||
![]() Бывалый ![]() Профиль Группа: Участник Сообщений: 228 Регистрация: 12.7.2005 Репутация: 20 Всего: 20 |
Да, со вторым замечанием я видимо поспешил, сорри... Просто я о таком никогда не слышал.
Просмотрел несколько книг (в том числе Страуструпа) нигде не встретил упоминания, что const_cast может устанавливать константность (говорилось только о снятии константности), но и опровержения этому также не встретил... Но предназначение const_cast все-таки в снятии константности. Это сообщение отредактировал(а) LPBOY - 3.8.2005, 15:48 --------------------
Каждый человек по-своему прав, а по-моему нет... |
|||
|
||||
mr.Anderson |
|
|||
![]() iOS Lead Developer ![]() ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 3374 Регистрация: 20.12.2004 Где: далеко Репутация: нет Всего: 128 |
Chaos A.D., статья, может быть, и хорошая, но я, к стыду своему, все равно ничего не понял...
Я одного не могу понять. Зачем программе работать с адресами переменных, а не с самими переменными (для этого ведь и существуют указатели и значки амперсанда, верно?). Кстати, еще непонятно, какая разница между указателями и "взятием адреса" через использование амперсанда (&)... |
|||
|
||||
Earnest |
|
||||||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Экс. модератор Сообщений: 5962 Регистрация: 17.6.2005 Где: Рязань Репутация: 53 Всего: 183 |
В "библии" рыться не буду, уж больно толста ![]()
Хотя, видимо, написать приведение к не-конст-типу можно, но смысла большого в этом нет. -------------------- ... |
||||||
|
|||||||
LPBOY |
|
|||
![]() Бывалый ![]() Профиль Группа: Участник Сообщений: 228 Регистрация: 12.7.2005 Репутация: 20 Всего: 20 |
sim7, тебе нужен хороший учебник. ИМХО самый лучший учебник - учебник С. Липпмана.
Верней у него их даже два. Один - огромная книжка где почти весь С++ описан во всех подробностях и все хорошо разжевано. (В инете ее легко найти). Вторая книжка небольшая, но написана для совсем начинающих, в инете видел только на англ. яз. ![]() --------------------
Каждый человек по-своему прав, а по-моему нет... |
|||
|
||||
mr.Anderson |
|
|||
![]() iOS Lead Developer ![]() ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 3374 Регистрация: 20.12.2004 Где: далеко Репутация: нет Всего: 128 |
А я что-то не нашел... Ее можно через инет скачать? Дайте ссылку, если можно... Прямую ссылку на файл, желательно. |
|||
|
||||
LPBOY |
|
|||
![]() Бывалый ![]() Профиль Группа: Участник Сообщений: 228 Регистрация: 12.7.2005 Репутация: 20 Всего: 20 |
--------------------
Каждый человек по-своему прав, а по-моему нет... |
|||
|
||||
mr.Anderson |
|
|||
![]() iOS Lead Developer ![]() ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 3374 Регистрация: 20.12.2004 Где: далеко Репутация: нет Всего: 128 |
Я ее грузил уже, оказывается... Там я еще больше ничего не понял, потому что там структура какая-то нездоровая. Начинает изучение языка с классов. Что-то у него там не то, там я еще больше не разобрался.
Может, дадите ссылку на учебник "стандартной" структуры (но для новичков, конечно)? |
|||
|
||||
LPBOY |
|
|||
![]() Бывалый ![]() Профиль Группа: Участник Сообщений: 228 Регистрация: 12.7.2005 Репутация: 20 Всего: 20 |
Читай с третей главы!!!
--------------------
Каждый человек по-своему прав, а по-моему нет... |
|||
|
||||
mr.Anderson |
|
|||
![]() iOS Lead Developer ![]() ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 3374 Регистрация: 20.12.2004 Где: далеко Репутация: нет Всего: 128 |
Понял, больше ссылок вы не знаете.
![]() |
|||
|
||||
chipset |
|
|||
Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Экс. модератор Сообщений: 4071 Регистрация: 11.1.2003 Где: Seattle, US Репутация: 27 Всего: 165 |
Читай Дейтела.
--------------------
|
|||
|
||||
LPBOY |
|
|||
![]() Бывалый ![]() Профиль Группа: Участник Сообщений: 228 Регистрация: 12.7.2005 Репутация: 20 Всего: 20 |
--------------------
Каждый человек по-своему прав, а по-моему нет... |
|||
|
||||
mr.Anderson |
|
|||
![]() iOS Lead Developer ![]() ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 3374 Регистрация: 20.12.2004 Где: далеко Репутация: нет Всего: 128 |
![]() ![]() |
|||
|
||||
chipset |
|
|||
Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Экс. модератор Сообщений: 4071 Регистрация: 11.1.2003 Где: Seattle, US Репутация: 27 Всего: 165 |
В другом ревью оно highly recommended: http://accu.org/bookreviews/public/reviews/c/c002311.htm
--------------------
|
|||
|
||||
En_t_end |
|
||||||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 2074 Регистрация: 4.12.2004 Репутация: 1 Всего: 20 |
Давай попорядку ![]() Программа не работает с адресами. Программа - это набор управляющих команд системе. Система, читая твою программу, будет в случае наличия команд управления адресами с ними и работать. Указатели изначально создавались для ускорения работы и оптимизации работы с ОЗУ. Попробую обьяснить на примере... у тебя есть класс Foo. Ты создал обьект Foo foo; Допустим класс Foo очень сложен и громоздок. Обьект foo занимает много памяти и поэтому в таком случае:
Приложение уйдет в лучшем случае в глубокий даун, а в худшем при нехватке памяти аварийно завершиться. Для не NT систем может также наблюдаться нарушение целостности памяти других процессов. Почему это происходит ? на строчке somefunc(foo); система делает ещё одну копию foo и поэтому, при условии, что создание первого обьекта от Foo завершилось успешно, не факт, что памяти хватит под второй. Также в этом примере мы не можем изменить уникальный foo в функции somefunc. Максимум, что мы можем сделать - это изменить его клона. Теперь пример, как бы можно сделать это правильно:
В этом примере, что наглядно, используется способ передачи параметра функции по ссылке. В данном случае клон foo не создается, а работа ведется с единственным foo, вернее с указателем на обьект класса Foo, значение которого в результате работы строчки somefunc(&foo) будет адрес foo. В данном примере мы можем работать с уникальными членами foo. Допустим мы можем так изменить public член something(int): lpfoo->something = 1; Ссылка - Адрес - Указатель... это вещи тесно взаимосвязанные в контексте C++. Адрес - это, если по простому - положение обьекта в памяти. Символ & обозначает взятие адреса. Указатель можно воспринимать, как тип способный хранить адреса на определенно типированную переменную. Указатель по сути не нужен будет, если он не ссылается на какой-то обьект памяти по определенному адресу. Чтобы узнать этот адрес, надо "взять адрес" - это логично. |
||||||
|
|||||||
![]() ![]() ![]() |
Правила форума "С++:Общие вопросы" | |
|
Добро пожаловать!
Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Earnest Daevaorn |
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей) | |
0 Пользователей: | |
« Предыдущая тема | C/C++: Общие вопросы | Следующая тема » |
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |