Модераторы: Daevaorn

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Указатели 
:(
    Опции темы
Chaos A.D.
Дата 3.8.2005, 14:14 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 172
Регистрация: 16.1.2005
Где: 09 RUS

Репутация: 6
Всего: 7



По поводу int &r = 12 - во времена написания статьи я пользовался только компилером Borland C++ 5.6, поэтому там оно работало. Естессно, что Borland-у до стандарта очень далеко...

На счет только снимает, но не устанавливает константность:

Eсли ты выполнишь
Код
const Foo *f = const_cast<const Foo*>(nonconst_foo);
где nonconst_foo - указатель на неконстантный Foo, получится, что хоть const из неconst-а получается автоматически, const_cast все же привел nonconst_foo к const Foo*. Это как в случае с implicit_cast, который не ввели в стандарт, потому что он реализовывался вручную и фактически ничего не делал, но вроде как приводил типы. Библии от страуструпа под рукой нет, так что некуда обратиться за истиной в последней инстанции.

Это сообщение отредактировал(а) Chaos A.D. - 3.8.2005, 14:17
--------------------
Надо смеяться над тем, что тебя мучит, иначе не сохранишь равновесия, иначе мир сведет тебя с ума...Ken Kesey - One Flew Over The Cocoo's Nest
PM MAIL   Вверх
LPBOY
Дата 3.8.2005, 15:30 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 228
Регистрация: 12.7.2005

Репутация: 20
Всего: 20



Да, со вторым замечанием я видимо поспешил, сорри... Просто я о таком никогда не слышал.
Просмотрел несколько книг (в том числе Страуструпа) нигде не встретил упоминания, что const_cast может устанавливать константность (говорилось только о снятии константности), но и опровержения этому также не встретил... Но предназначение const_cast все-таки в снятии константности.

Это сообщение отредактировал(а) LPBOY - 3.8.2005, 15:48
--------------------
Каждый человек по-своему прав, а по-моему нет...
PM MAIL   Вверх
mr.Anderson
Дата 3.8.2005, 17:00 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


iOS Lead Developer
****


Профиль
Группа: Участник Клуба
Сообщений: 3374
Регистрация: 20.12.2004
Где: далеко

Репутация: нет
Всего: 128



Chaos A.D., статья, может быть, и хорошая, но я, к стыду своему, все равно ничего не понял...
Я одного не могу понять. Зачем программе работать с адресами переменных, а не с самими переменными (для этого ведь и существуют указатели и значки амперсанда, верно?). Кстати, еще непонятно, какая разница между указателями и "взятием адреса" через использование амперсанда (&)...


--------------------
user posted image

user posted image
PM MAIL ICQ Skype   Вверх
Earnest
Дата 3.8.2005, 18:25 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Экс. модератор
Сообщений: 5962
Регистрация: 17.6.2005
Где: Рязань

Репутация: 53
Всего: 183



Цитата(LPBOY @ 3.8.2005, 10:08)
ИМХО, только снимает, но не устанавливает константность.

Цитата(Chaos @ 3.8.2005, 14:14)
Библии от страуструпа под рукой нет, так что некуда обратиться за истиной в последней инстанции.

В "библии" рыться не буду, уж больно толста smile , но вот MSDN говорит, что только снимает:
Цитата(MSDN)
The const_cast operator can be used to remove the const, volatile, and __unaligned attribute(s) from a class.

Хотя, видимо, написать приведение к не-конст-типу можно, но смысла большого в этом нет.




--------------------
...
PM   Вверх
LPBOY
Дата 3.8.2005, 18:46 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 228
Регистрация: 12.7.2005

Репутация: 20
Всего: 20



sim7, тебе нужен хороший учебник. ИМХО самый лучший учебник - учебник С. Липпмана.
Верней у него их даже два. Один - огромная книжка где почти весь С++ описан во всех подробностях и все хорошо разжевано. (В инете ее легко найти). Вторая книжка небольшая, но написана для совсем начинающих, в инете видел только на англ. яз. smile Хотя вот здесь http://forum.vingrad.ru/index.php?showtopic=33456 я видел несколько ссылок на нее, но насчет языка не знаю.
--------------------
Каждый человек по-своему прав, а по-моему нет...
PM MAIL   Вверх
mr.Anderson
Дата 3.8.2005, 19:20 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


iOS Lead Developer
****


Профиль
Группа: Участник Клуба
Сообщений: 3374
Регистрация: 20.12.2004
Где: далеко

Репутация: нет
Всего: 128



Цитата
В инете ее легко найти

А я что-то не нашел... Ее можно через инет скачать? Дайте ссылку, если можно... Прямую ссылку на файл, желательно.


--------------------
user posted image

user posted image
PM MAIL ICQ Skype   Вверх
LPBOY
Дата 3.8.2005, 19:31 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 228
Регистрация: 12.7.2005

Репутация: 20
Всего: 20



--------------------
Каждый человек по-своему прав, а по-моему нет...
PM MAIL   Вверх
mr.Anderson
Дата 3.8.2005, 19:34 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


iOS Lead Developer
****


Профиль
Группа: Участник Клуба
Сообщений: 3374
Регистрация: 20.12.2004
Где: далеко

Репутация: нет
Всего: 128



Я ее грузил уже, оказывается... Там я еще больше ничего не понял, потому что там структура какая-то нездоровая. Начинает изучение языка с классов. Что-то у него там не то, там я еще больше не разобрался.
Может, дадите ссылку на учебник "стандартной" структуры (но для новичков, конечно)?


--------------------
user posted image

user posted image
PM MAIL ICQ Skype   Вверх
LPBOY
Дата 3.8.2005, 19:47 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 228
Регистрация: 12.7.2005

Репутация: 20
Всего: 20



Читай с третей главы!!!
--------------------
Каждый человек по-своему прав, а по-моему нет...
PM MAIL   Вверх
mr.Anderson
Дата 4.8.2005, 11:45 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


iOS Lead Developer
****


Профиль
Группа: Участник Клуба
Сообщений: 3374
Регистрация: 20.12.2004
Где: далеко

Репутация: нет
Всего: 128



Понял, больше ссылок вы не знаете. smile Ладно, все равно спасибо.


--------------------
user posted image

user posted image
PM MAIL ICQ Skype   Вверх
chipset
Дата 4.8.2005, 14:38 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Экс. модератор
Сообщений: 4071
Регистрация: 11.1.2003
Где: Seattle, US

Репутация: 27
Всего: 165



Читай Дейтела.


--------------------
Цитата(Jimi Hendrix)
Well, I stand up next to a mountain
And I chop it down with the edge of my hand
PM MAIL WWW   Вверх
LPBOY
Дата 4.8.2005, 15:09 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 228
Регистрация: 12.7.2005

Репутация: 20
Всего: 20



Хм... Дейтела опустили вот тут вот... smile
http://accu.org/cgi-bin/accu/rvout.cgi?fro...&file=cp003204a
--------------------
Каждый человек по-своему прав, а по-моему нет...
PM MAIL   Вверх
mr.Anderson
Дата 4.8.2005, 16:15 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


iOS Lead Developer
****


Профиль
Группа: Участник Клуба
Сообщений: 3374
Регистрация: 20.12.2004
Где: далеко

Репутация: нет
Всего: 128



smile Я в английском ничего не понимаю, но надпись "Not Recommended" понятна вполне. smile Так стоит ли его (Дейтела) покупать, и какая самая лучшая книга по C++ от него?


--------------------
user posted image

user posted image
PM MAIL ICQ Skype   Вверх
chipset
Дата 4.8.2005, 16:33 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Экс. модератор
Сообщений: 4071
Регистрация: 11.1.2003
Где: Seattle, US

Репутация: 27
Всего: 165



В другом ревью оно highly recommended: http://accu.org/bookreviews/public/reviews/c/c002311.htm


--------------------
Цитата(Jimi Hendrix)
Well, I stand up next to a mountain
And I chop it down with the edge of my hand
PM MAIL WWW   Вверх
En_t_end
Дата 5.8.2005, 11:22 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Участник Клуба
Сообщений: 2074
Регистрация: 4.12.2004

Репутация: 1
Всего: 20



Цитата(sim7 @ 3.8.2005, 21:00)
Я одного не могу понять. Зачем программе работать с адресами переменных, а не с самими переменными (для этого ведь и существуют указатели и значки амперсанда, верно?). Кстати, еще непонятно, какая разница между указателями и "взятием адреса" через использование амперсанда (&)...

Давай попорядку smile
Программа не работает с адресами. Программа - это набор управляющих команд системе. Система, читая твою программу, будет в случае наличия команд управления адресами с ними и работать. Указатели изначально создавались для ускорения работы и оптимизации работы с ОЗУ. Попробую обьяснить на примере... у тебя есть класс Foo. Ты создал обьект Foo foo; Допустим класс Foo очень сложен и громоздок. Обьект foo занимает много памяти и поэтому в таком случае:
Код

void somefunc(Foo foo_clone)
{
//Делаем что-то страшное :)
}
//**********************
//Где-то в коде...
Foo foo;
somefunc(foo);

Приложение уйдет в лучшем случае в глубокий даун, а в худшем при нехватке памяти аварийно завершиться. Для не NT систем может также наблюдаться нарушение целостности памяти других процессов.
Почему это происходит ? на строчке somefunc(foo); система делает ещё одну копию foo и поэтому, при условии, что создание первого обьекта от Foo завершилось успешно, не факт, что памяти хватит под второй. Также в этом примере мы не можем изменить уникальный foo в функции somefunc. Максимум, что мы можем сделать - это изменить его клона.
Теперь пример, как бы можно сделать это правильно:
Код

void somefunc(Foo *lpfoo)
{
//Делаем что-то страшное :)
}
//**********************
//Где-то в коде...
Foo foo;
somefunc(&foo);

В этом примере, что наглядно, используется способ передачи параметра функции по ссылке.
В данном случае клон foo не создается, а работа ведется с единственным foo, вернее с указателем на обьект класса Foo, значение которого в результате работы строчки somefunc(&foo) будет адрес foo. В данном примере мы можем работать с уникальными членами foo. Допустим мы можем так изменить public член something(int): lpfoo->something = 1;

Ссылка - Адрес - Указатель... это вещи тесно взаимосвязанные в контексте C++. Адрес - это, если по простому - положение обьекта в памяти. Символ & обозначает взятие адреса. Указатель можно воспринимать, как тип способный хранить адреса на определенно типированную переменную. Указатель по сути не нужен будет, если он не ссылается на какой-то обьект памяти по определенному адресу. Чтобы узнать этот адрес, надо "взять адрес" - это логично.
PM MAIL ICQ Skype GTalk Jabber   Вверх
Страницы: (3) Все 1 [2] 3 
Ответ в темуСоздание новой темы Создание опроса
Правила форума "С++:Общие вопросы"
Earnest Daevaorn

Добро пожаловать!

  • Черновик стандарта C++ (за октябрь 2005) можно скачать с этого сайта. Прямая ссылка на файл черновика(4.4мб).
  • Черновик стандарта C (за сентябрь 2005) можно скачать с этого сайта. Прямая ссылка на файл черновика (3.4мб).
  • Прежде чем задать вопрос, прочтите это и/или это!
  • Здесь хранится весь мировой запас ссылок на документы, связанные с C++ :)
  • Не брезгуйте пользоваться тегами [code=cpp][/code].
  • Пожалуйста, не просите написать за вас программы в этом разделе - для этого существует "Центр Помощи".
  • C++ FAQ

Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Earnest Daevaorn

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | C/C++: Общие вопросы | Следующая тема »


 




[ Время генерации скрипта: 0.0802 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.