Re[5]: T const *
От: MasterZiv СССР  
Дата: 01.02.12 10:26
Оценка:
> Это как раз одна из причин, почему я пишу const суффиксом: «T const *» вместо
> эквивалентного «const T*». В этом случае фрагменты «const <pointer>» и
> «const_iterator» смотрятся единообразно и читаются справа налево при переводе с
> языка C++ на язык естественный.

А я всегда пишу " const T* " и " const T& ", потому что для меня С++ --
естественный.
Posted via RSDN NNTP Server 2.1 beta
Re[3]: За что мы любим Хабрахабр?
От: fin_81  
Дата: 01.02.12 10:30
Оценка:
Здравствуйте, B0FEE664, Вы писали:

_>>на сколько часто встречается такая конструкция,


BFE>часто. Вот, специально для вас, строчка из проекта:

BFE>const boost::shared_ptr<const Alerts>&

shared_ptr — это не только указатель (но и 3-4 кг диетического мяса), это управление владением/жизнью указываемого объекта, это логика поверх указателя.
Откуда эта строчка? Из объявления функции? Если да, то зачем эта обертка из shared_ptr? Не проще ли передать только {const Alerts&}? Можно больше контекста, чтобы понять осмысленность или бессмысленность этой конструкции?

[offtop]
Или вам нравится заострять внимание на "->" при любом удобном и не удобном случае? Говорят у кого чего болит, тот о том и говорит. Может следует сходит к тому кто может снять эту боль?
[/offtop]
Re[6]: const_iterator
От: LuciferSingapore Россия  
Дата: 01.02.12 10:52
Оценка:
Здравствуйте, Erop, Вы писали:

E>Соответственно указатель 0xA1B3C5D4 тоже нельзя поменять, можно поменять занчение переменной, хранящей указатель.


0xA1B3C5D4 это не "указатель", а адрес. Указатель — это переменная, которая его хранит.
Re[7]: const_iterator
От: Erop Россия  
Дата: 01.02.12 12:29
Оценка:
Здравствуйте, LuciferSingapore, Вы писали:

LS>0xA1B3C5D4 это не "указатель", а адрес. Указатель — это переменная, которая его хранит.


Почему переменная, а не знаение?
Все эмоциональные формулировки не соотвествуют действительному положению вещей и приведены мной исключительно "ради красного словца". За корректными формулировками и неискажённым изложением идей, следует обращаться к их автором или воспользоваться поиском
Re[8]: const_iterator
От: о_О
Дата: 01.02.12 12:37
Оценка: +1 :)
Здравствуйте, MasterZiv, Вы писали:

MZ>On 02/01/2012 01:12 PM, о О wrote:


>> E>Я на ваш хабр не хожу...

>> я тоже не хожу

MZ>Дык, не пускають ...


илитный частни клубЪ. валенкам вход воспрещён (stars only )
Re[2]: За что мы любим Хабрахабр?
От: Banned by IT  
Дата: 01.02.12 12:47
Оценка:
Здравствуйте, solid_snake, Вы писали:

_>Вот поэтому я и бросил C++.

Не смог запомнить с какой стороны от звёздочки надо писать const?
... << RSDN@Home 1.1.4 stable SR1 rev. 568>>
Re[8]: const_iterator
От: LuciferSingapore Россия  
Дата: 01.02.12 12:55
Оценка:
Здравствуйте, Erop, Вы писали:

E>Здравствуйте, LuciferSingapore, Вы писали:


LS>>0xA1B3C5D4 это не "указатель", а адрес. Указатель — это переменная, которая его хранит.


E>Почему переменная, а не знаение?


Ну это как указатель на столбе, сейчас он показывает на один адрес, а можно его взять и повернуть, и он будет показывать на другой.
Re[4]: За что мы любим Хабрахабр?
От: B0FEE664  
Дата: 01.02.12 13:45
Оценка:
Здравствуйте, 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 будет уничтожен — не известно.

_> Можно больше контекста, чтобы понять осмысленность или бессмысленность этой конструкции?


Всё осмысленно. Я следую правилам компании здесь
Автор: B0FEE664
Дата: 24.10.11


_>[offtop]

_>Или вам нравится заострять внимание на "->" при любом удобном и не удобном случае? Говорят у кого чего болит, тот о том и говорит. Может следует сходит к тому кто может снять эту боль?
_>[/offtop]
Это переделанная шутка из какой-то книжки по программированию. Если не ошибаюсь, то про умные и гениальные указатели и их грани...
И каждый день — без права на ошибку...
Re[8]: const_iterator
От: . Великобритания  
Дата: 01.02.12 15:29
Оценка: +3
Здравствуйте, Erop, Вы писали:

LS>>0xA1B3C5D4 это не "указатель", а адрес. Указатель — это переменная, которая его хранит.

E>Почему переменная, а не знаение?
По определению. Хоть вики возьми "Указатель (поинтер, англ. pointer) — переменная, диапазон значений которой состоит из адресов ячеек памяти и специального значения — нулевого адреса.".
Или ты так, потроллить просто?
но это не зря, хотя, может быть, невзначай
гÅрмония мира не знает границ — сейчас мы будем пить чай
Re[5]: За что мы любим Хабрахабр?
От: fin_81  
Дата: 01.02.12 15:50
Оценка:
Здравствуйте, 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>?
И вообще странно, смотрится "константная ссылка на умный указатель", полный го-дипер . Здравый смысл подсказывает стараться избегать таких конструкций.
Re[2]: За что мы любим Хабрахабр?
От: squid  
Дата: 01.02.12 17:24
Оценка:
Здравствуйте, MasterZiv, Вы писали:

MZ> On 02/01/2012 08:44 AM, Qbit86 wrote:


MZ> > Разумеется, за высокую квалификацию участников сообщества и выдающееся качество

MZ> > статей.

MZ> А я лично люблю его совсем за другое, вот за это:

MZ> -----------------------------------------------------

MZ> -----------------------------------------------------


MZ> Ну так и пусть их себе там варятся...


И что? регистрация 3 минуты занимает. В режиме read-only. Большинство блогов доступы без нее. Люблю хабр :P
avalon 1.0rc3 rev 419, zlib 1.2.3
Re: За что мы любим Хабрахабр?
От: 11molniev  
Дата: 01.02.12 17:25
Оценка:
Здравствуйте, Qbit86, Вы писали:

Q>Разумеется, за высокую квалификацию участников сообщества и выдающееся качество статей.


Q>

Q>Константный указатель на неконстантный объект это:

Q>26.52%
Q>(148) Foo *const foo

Q>41.04%
Q>(229) const Foo *foo

Q>http://habrahabr.ru/blogs/cpp/137375/


Q>Эпик фейспалм. Где моя жидкость для розжига межресурсовой ненависти.


Ну не знаю. Голосавания и статьи там бред конечно, но вот коменты читать очень весело. Поднимает настроение.
Так что мой любимый сайт для отдыха))))
Re[6]: За что мы любим Хабрахабр?
От: B0FEE664  
Дата: 01.02.12 17:49
Оценка:
Здравствуйте, 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&
то запись не будет казаться чем-то странным.
И каждый день — без права на ошибку...
Re[7]: За что мы любим Хабрахабр?
От: fin_81  
Дата: 01.02.12 18:38
Оценка:
Здравствуйте, 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>то запись не будет казаться чем-то странным.

Бритва Оккама "не плоди сущности без необходимости".
Re[3]: const_iterator
От: мыщъх США http://nezumi-lab.org
Дата: 01.02.12 18:49
Оценка:
Здравствуйте, Qbit86, Вы писали:


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.
Re: За что мы любим Хабрахабр?
От: goondick  
Дата: 01.02.12 19:02
Оценка: 1 (1) +2 -1
Здравствуйте, Qbit86, Вы писали:

Q>Разумеется, за высокую квалификацию участников сообщества и выдающееся качество статей.


Q>

Q>Константный указатель на неконстантный объект это:

Q>26.52%
Q>(148) Foo *const foo

Q>41.04%
Q>(229) const Foo *foo

Q>http://habrahabr.ru/blogs/cpp/137375/


Q>Эпик фейспалм. Где моя жидкость для розжига межресурсовой ненависти.


более десяти лет писал несколько больших и маленких проектов на си++, ни разу не использовал константные указатели на неконстантные обьекты. У меня есть смутные сомнения, что квалификация программиста не меряется знанием такой замороченной сишной мути.
Re[2]: За что мы любим Хабрахабр?
От: m e  
Дата: 01.02.12 19:22
Оценка:
G>более десяти лет писал несколько больших и маленких проектов на си++, ни разу не использовал константные указатели на неконстантные обьекты. У меня есть смутные сомнения, что квалификация программиста не меряется знанием такой замороченной сишной мути.

концепция проста как паренная репа (а вовсе и не муть), а вот синтаксис ужасен, и по нему действительно ничего нельзя мерить
Re[9]: const_iterator
От: Erop Россия  
Дата: 02.02.12 03:59
Оценка:
Здравствуйте, ., Вы писали:

.>По определению. Хоть вики возьми "Указатель (поинтер, англ. pointer) — переменная, диапазон значений которой состоит из адресов ячеек памяти и специального значения — нулевого адреса.".

Прикольно. А как ты понимаешь себе тогда "множество указателей", например (в смысле std::set<T*>)?
Ещё интересно, поинмаешь ли ты "число", как переменную, которая содержит число? Можно ли сказать, что функция malloc возвращает указатель? И если да, то не затрудни ли тебя указать что там за переменная имеется в виду?

.>Или ты так, потроллить просто?


Часть "совсем не потроллить" закончилась на словах о том, что я не понимаю, зачем описывать С++ конструкции русским языком, а не использовать их сами по себе...
Все эмоциональные формулировки не соотвествуют действительному положению вещей и приведены мной исключительно "ради красного словца". За корректными формулировками и неискажённым изложением идей, следует обращаться к их автором или воспользоваться поиском
Re[3]: За что мы любим Хабрахабр?
От: Erop Россия  
Дата: 02.02.12 04:51
Оценка: +1
Здравствуйте, squid, Вы писали:

S>И что? регистрация 3 минуты занимает. В режиме read-only. Большинство блогов доступы без нее. Люблю хабр :P


Не-не-не, регистраию ещё надо залужить. И не пускать меня любимого -- это довольно плохая стратегия склонить меня к регистрации на их говноресурсе
Все эмоциональные формулировки не соотвествуют действительному положению вещей и приведены мной исключительно "ради красного словца". За корректными формулировками и неискажённым изложением идей, следует обращаться к их автором или воспользоваться поиском
Re[4]: За что мы любим Хабрахабр?
От: MTD https://github.com/mtrempoltsev
Дата: 02.02.12 06:16
Оценка:
Здравствуйте, Erop, Вы писали:

E>Как интересно. Расскажи теперь, пожалуйста, про отличия std::vector<T>::const_iterator и const T*


std::vector<T>::const_iterator — это объект-итератор частично повторяющий поведение указателя константный объект типа T, const T* — это указатель на константный объект типа T. Больше в букваре написано
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.