> Это как раз одна из причин, почему я пишу const суффиксом: «T const *» вместо > эквивалентного «const T*». В этом случае фрагменты «const <pointer>» и > «const_iterator» смотрятся единообразно и читаются справа налево при переводе с > языка C++ на язык естественный.
А я всегда пишу " const T* " и " const T& ", потому что для меня С++ --
естественный.
Здравствуйте, B0FEE664, Вы писали:
_>>на сколько часто встречается такая конструкция,
BFE>часто. Вот, специально для вас, строчка из проекта: BFE>const boost::shared_ptr<const Alerts>&
shared_ptr — это не только указатель (но и 3-4 кг диетического мяса), это управление владением/жизнью указываемого объекта, это логика поверх указателя.
Откуда эта строчка? Из объявления функции? Если да, то зачем эта обертка из shared_ptr? Не проще ли передать только {const Alerts&}? Можно больше контекста, чтобы понять осмысленность или бессмысленность этой конструкции?
[offtop]
Или вам нравится заострять внимание на "->" при любом удобном и не удобном случае? Говорят у кого чего болит, тот о том и говорит. Может следует сходит к тому кто может снять эту боль?
[/offtop]
Здравствуйте, LuciferSingapore, Вы писали:
LS>0xA1B3C5D4 это не "указатель", а адрес. Указатель — это переменная, которая его хранит.
Почему переменная, а не знаение?
Все эмоциональные формулировки не соотвествуют действительному положению вещей и приведены мной исключительно "ради красного словца". За корректными формулировками и неискажённым изложением идей, следует обращаться к их автором или воспользоваться поиском
Здравствуйте, Erop, Вы писали:
E>Здравствуйте, LuciferSingapore, Вы писали:
LS>>0xA1B3C5D4 это не "указатель", а адрес. Указатель — это переменная, которая его хранит.
E>Почему переменная, а не знаение?
Ну это как указатель на столбе, сейчас он показывает на один адрес, а можно его взять и повернуть, и он будет показывать на другой.
Здравствуйте, fin_81, Вы писали:
_>>>на сколько часто встречается такая конструкция, BFE>>часто. Вот, специально для вас, строчка из проекта: BFE>>const boost::shared_ptr<const Alerts>&
_>shared_ptr — это не только указатель (но и 3-4 кг диетического мяса), это управление владением/жизнью указываемого объекта, это логика поверх указателя. _>Откуда эта строчка? Из объявления функции?
да.
_> Если да, то зачем эта обертка из shared_ptr?
Alerts заказаны по new. Хранятся в одном из объектов. Могут быть созданы в другой нитке и переданы в этот объект навечно (время жизни до 4-x секунд).
_> Не проще ли передать только {const Alerts&}?
Проще-то оно может и проще, но надо обосновать.
Alerts хранятся как boost::shared_ptr<Alerts> в одном из объектов.
Alerts Могут быть NULL
Передаются в функцию объекта, которая не должна менять Alerts.
Теоретически этот объект может "захотеть" сохранить переданный параметр (с правами только на чтение) на некоторое время.
Кто первый из двух объектов хранящих указатель на Alerts будет уничтожен — не известно.
_> Можно больше контекста, чтобы понять осмысленность или бессмысленность этой конструкции?
_>[offtop] _>Или вам нравится заострять внимание на "->" при любом удобном и не удобном случае? Говорят у кого чего болит, тот о том и говорит. Может следует сходит к тому кто может снять эту боль? _>[/offtop]
Это переделанная шутка из какой-то книжки по программированию. Если не ошибаюсь, то про умные и гениальные указатели и их грани...
Здравствуйте, Erop, Вы писали:
LS>>0xA1B3C5D4 это не "указатель", а адрес. Указатель — это переменная, которая его хранит. E>Почему переменная, а не знаение?
По определению. Хоть вики возьми "Указатель (поинтер, англ. pointer) — переменная, диапазон значений которой состоит из адресов ячеек памяти и специального значения — нулевого адреса.".
Или ты так, потроллить просто?
но это не зря, хотя, может быть, невзначай
гÅрмония мира не знает границ — сейчас мы будем пить чай
Здравствуйте, B0FEE664, Вы писали:
_>> Не проще ли передать только {const Alerts&}? BFE>Проще-то оно может и проще, но надо обосновать. BFE>Alerts хранятся как boost::shared_ptr<Alerts> в одном из объектов.
Не мешает передавать как const T&
BFE>Alerts Могут быть NULL
ну тогда const T*, но не const T * const. Пока не вижу смысла в константном указателе.
BFE>Передаются в функцию объекта, которая не должна менять Alerts.
ничего не изменилось.
BFE>Теоретически этот объект может "захотеть" сохранить переданный параметр (с правами только на чтение) на некоторое время. BFE>Кто первый из двух объектов хранящих указатель на Alerts будет уничтожен — не известно.
Так теоретически или все таки сохраняет? У объекта есть поле типа boost::shared_ptr<Alerts>?
И вообще странно, смотрится "константная ссылка на умный указатель", полный го-дипер . Здравый смысл подсказывает стараться избегать таких конструкций.
Здравствуйте, MasterZiv, Вы писали:
MZ> On 02/01/2012 08:44 AM, Qbit86 wrote:
MZ> > Разумеется, за высокую квалификацию участников сообщества и выдающееся качество MZ> > статей.
MZ> А я лично люблю его совсем за другое, вот за это: MZ> -----------------------------------------------------
MZ> -----------------------------------------------------
MZ> Ну так и пусть их себе там варятся...
И что? регистрация 3 минуты занимает. В режиме read-only. Большинство блогов доступы без нее. Люблю хабр :P
Здравствуйте, fin_81, Вы писали:
_>>> Не проще ли передать только {const Alerts&}? BFE>>Проще-то оно может и проще, но надо обосновать. BFE>>Alerts хранятся как boost::shared_ptr<Alerts> в одном из объектов. _>Не мешает передавать как const T&
BFE>>Alerts Могут быть NULL _>ну тогда const T*, но не const T * const. Пока не вижу смысла в константном указателе.
Как это не поменялось? Теперь мы не знаем, когда T уничтожать
BFE>>Теоретически этот объект может "захотеть" сохранить переданный параметр (с правами только на чтение) на некоторое время. BFE>>Кто первый из двух объектов хранящих указатель на Alerts будет уничтожен — не известно. _>Так теоретически или все таки сохраняет? У объекта есть поле типа boost::shared_ptr<Alerts>?
В данном конкретном случае — теоретически. Но в других проектах я использовал коллекции умных указателей для кеширования данных. И вообще — это обычное дело, когда владельцы shared_ptr не знают о друг друге.
_>И вообще странно, смотрится "константная ссылка на умный указатель", полный го-дипер . Здравый смысл подсказывает стараться избегать таких конструкций.
Если сделать
typedef boost::shared_ptr<Alerts> SharedAlerts;
то запись
const SharedAlerts&
то запись не будет казаться чем-то странным.
Здравствуйте, B0FEE664, Вы писали:
BFE>>>Alerts Могут быть NULL _>>ну тогда const T*, но не const T * const. Пока не вижу смысла в константном указателе.
BFE>Как это не поменялось? Теперь мы не знаем, когда T уничтожать
Если в этом методе не сохраняешь в полях объекта этот умный указатель, то с жизнью/владением объекта управляет вызывающий код, а в этом методе эта дополнительная логика и этот "го-дипер" пока не нужен.
_>>Так теоретически или все таки сохраняет? У объекта есть поле типа boost::shared_ptr<Alerts>?
BFE>В данном конкретном случае — теоретически. Но в других проектах я использовал коллекции умных указателей для кеширования данных. И вообще — это обычное дело, когда владельцы shared_ptr не знают о друг друге.
То есть в данном случае shared_prt избыточен и по количеству символов в объявлении функции, и по смысловой нагрузке.
На счет кеша, жизнью объектов кеша обычно управляет сам кеш, в соответствии с ограничениями по времени и/или по памяти (и тп), а не запрашивающий данные объект, то есть хранить shared_ptr в объекте для информации лежащей в кеше — это нарваться на нарушение ограничений кеша. Разве что weak_ptr с проверкой на валидность и перезапросом тех же данных.
_>>И вообще странно, смотрится "константная ссылка на умный указатель", полный го-дипер . Здравый смысл подсказывает стараться избегать таких конструкций. BFE>Если сделать BFE>typedef boost::shared_ptr<Alerts> SharedAlerts; BFE>то запись BFE>const SharedAlerts& BFE>то запись не будет казаться чем-то странным.
Бритва Оккама "не плоди сущности без необходимости".
Q>И итераторов, например, const_iterator. Поэтому я тоже говорю «итератор на константу» вместо «константный итератор», не говоря уже про «ссылку на константу».
а чем отличается "ссылка на константу" от "константа на ссылку" ?
americans fought a war for a freedom. another one to end slavery. so, what do some of them choose to do with their freedom? become slaves.
Q>Эпик фейспалм. Где моя жидкость для розжига межресурсовой ненависти.
более десяти лет писал несколько больших и маленких проектов на си++, ни разу не использовал константные указатели на неконстантные обьекты. У меня есть смутные сомнения, что квалификация программиста не меряется знанием такой замороченной сишной мути.
G>более десяти лет писал несколько больших и маленких проектов на си++, ни разу не использовал константные указатели на неконстантные обьекты. У меня есть смутные сомнения, что квалификация программиста не меряется знанием такой замороченной сишной мути.
концепция проста как паренная репа (а вовсе и не муть), а вот синтаксис ужасен, и по нему действительно ничего нельзя мерить
Здравствуйте, ., Вы писали:
.>По определению. Хоть вики возьми "Указатель (поинтер, англ. pointer) — переменная, диапазон значений которой состоит из адресов ячеек памяти и специального значения — нулевого адреса.".
Прикольно. А как ты понимаешь себе тогда "множество указателей", например (в смысле std::set<T*>)?
Ещё интересно, поинмаешь ли ты "число", как переменную, которая содержит число? Можно ли сказать, что функция malloc возвращает указатель? И если да, то не затрудни ли тебя указать что там за переменная имеется в виду?
.>Или ты так, потроллить просто?
Часть "совсем не потроллить" закончилась на словах о том, что я не понимаю, зачем описывать С++ конструкции русским языком, а не использовать их сами по себе...
Все эмоциональные формулировки не соотвествуют действительному положению вещей и приведены мной исключительно "ради красного словца". За корректными формулировками и неискажённым изложением идей, следует обращаться к их автором или воспользоваться поиском
Здравствуйте, squid, Вы писали:
S>И что? регистрация 3 минуты занимает. В режиме read-only. Большинство блогов доступы без нее. Люблю хабр :P
Не-не-не, регистраию ещё надо залужить. И не пускать меня любимого -- это довольно плохая стратегия склонить меня к регистрации на их говноресурсе
Все эмоциональные формулировки не соотвествуют действительному положению вещей и приведены мной исключительно "ради красного словца". За корректными формулировками и неискажённым изложением идей, следует обращаться к их автором или воспользоваться поиском
Здравствуйте, Erop, Вы писали:
E>Как интересно. Расскажи теперь, пожалуйста, про отличия std::vector<T>::const_iterator и const T*
std::vector<T>::const_iterator — это объект-итератор частично повторяющий поведение указателя константный объект типа T, const T* — это указатель на константный объект типа T. Больше в букваре написано