Здравствуйте, Erop, Вы писали:
E>Но указатель -- это это же значение, а не объект с какиими-тто состояниями. В каком-то смысле никакой указатель нельзя менть, так же, как и число пять нельзя менять, например...
В каком таком «каком-то» смысле указатель нельзя менять? Был, например, (неконстантный) указатель со значением адреса 0xA1B3C5D4, стал указателем со значением 0xB2C4D6E7. Число пять — литерал, это вообще rvalue.
E>Кстати, помогите моему склерозу. Разве константная ссылка -- это не термин из стандарта?
Константная ссылка разночтений не вызывает. Но я всё равно называю её ссылкой на константу.
Здравствуйте, Erop, Вы писали:
E>Так что там у теюя выходит? const_iterator -- неконстантный, или T const*, таки константный? Или между ними есть какая-то принципиальная разница в семантике? ;)
Использую такую нотацию, которая допускает чтение справа налево.
const_iterator — неконстантный итератор на константу.
const_iterator const — константный итератор на константу.
const const_iterator — тоже константный итератор на константу (не использую такую нотацию).
T const* — неконстантный указатель на константу.
const T* — тоже неконстантный указатель на константу (не использую такую нотацию).
T* const — константный указатель на неконстанту.
Здравствуйте, Qbit86, Вы писали:
Q>В каком таком «каком-то» смысле указатель нельзя менять? Был, например, (неконстантный) указатель со значением адреса 0xA1B3C5D4, стал указателем со значением 0xB2C4D6E7. Число пять — литерал, это вообще rvalue.
Обычно, кога говорят "число", то имеют в виду не числовую переменную, сожержащую какое-то значение, а само значение -- число. С указателями есть аналогичная традиция.
Соответственно указатель 0xA1B3C5D4 тоже нельзя поменять, можно поменять занчение переменной, хранящей указатель.
Вообще, чаще всего тип переменных надо называть, когда это либо формальный параметр функции, либо тип возвращаемого значения. реже, когда это поле, и совсем редко нужен тип просто автоматической переменной.
Я так думаю, что терминология идёт из этого обстоятельства.
Q>Константная ссылка разночтений не вызывает. Но я всё равно называю её ссылкой на константу.
Это последовательно, но не общепринято...
Все эмоциональные формулировки не соотвествуют действительному положению вещей и приведены мной исключительно "ради красного словца". За корректными формулировками и неискажённым изложением идей, следует обращаться к их автором или воспользоваться поиском
Здравствуйте, Qbit86, Вы писали:
Q>const_iterator — неконстантный итератор на константу.
А если по-английски общаешься? Неужели не cont iterator называешь?
Все эмоциональные формулировки не соотвествуют действительному положению вещей и приведены мной исключительно "ради красного словца". За корректными формулировками и неискажённым изложением идей, следует обращаться к их автором или воспользоваться поиском
Здравствуйте, Qbit86, Вы писали:
Q>Константный указатель на неконстантный объект это:
Q>Foo *const foo Q>const Foo *foo
Мне кажется здесь семантический оверхед на квадратный сантиметр букв и на человеческом языке и на языке программирования. Шаблон программирования "го-дипер". А какие проблемы решает эта конструкция, на сколько часто встречается такая конструкция, есть ли смысл заострять на этом внимание?
Здравствуйте, о_О, Вы писали:
о_О>я смотрю ты тоже голосовал...
Я на ваш хабр не хожу...
Все эмоциональные формулировки не соотвествуют действительному положению вещей и приведены мной исключительно "ради красного словца". За корректными формулировками и неискажённым изложением идей, следует обращаться к их автором или воспользоваться поиском
Здравствуйте, Erop, Вы писали:
Q>>const_iterator — неконстантный итератор на константу. E>А если по-английски общаешься? Неужели не cont iterator называешь? :???:
По-английски я на тему C++ не общаюсь. Но, наверное, называл бы iterator to const. Даже если это непривычно адресату, он вряд ли перепутает.
Здравствуйте, fin_81, Вы писали:
f> Мне кажется здесь семантический оверхед на квадратный сантиметр букв и на человеческом языке и на языке программирования. Шаблон программирования "го-дипер". А какие проблемы решает эта конструкция, на сколько часто встречается такая конструкция, есть ли смысл заострять на этом внимание?
Встречается повсеместно. Оверхед в сравнении с более современными языками может и есть, но это здесь не играет роли.
Здравствуйте, fin_81, Вы писали:
Q>>Константный указатель на неконстантный объект это:
Q>>Foo *const foo Q>>const Foo *foo
_>А какие проблемы решает эта конструкция,
Позволяет ясно декларировать намерения автора кода.
_>на сколько часто встречается такая конструкция,
часто. Вот, специально для вас, строчка из проекта:
const boost::shared_ptr<const Alerts>&
_>есть ли смысл заострять на этом внимание?
Рассмотрим запись a->b
Известно, что если на вечеринке rsdn вы назовёте стрелочкой этот модификатор доступа к члену класса, то все на несколько секунд замолкнут и уставятся на вас, а кто-то в углу комнаты уронит бокал...
Здравствуйте, wander, Вы писали:
W>Встречается повсеместно. Оверхед в сравнении с более современными языками может и есть, но это здесь не играет роли.
Константный указатель (*const) часто встречается? Не верю. И этот опрос на хабре это подтверждает. Если и встречается, то эту конструкцию не понимают, а те кто понимает, то старается не использовать, чтобы не вводить в ступор своих коллег. Ссылки более понятны (семантически менее перегружены), покрывают практически весь функционал константных указателей, кроме NULL.
Если рассматривать чистый си, то там еще большие проблемы с const, особенно при работе со стандартными библиотеками, которые в основном решаются путем игнорирования или принудительного снятия константности.
И вообще const похожа целую философию, которую пытались перенять из функционального программирования. И как то она плохо вяжется с присваиванием переменных.
Здравствуйте, Философ, Вы писали:
>>Константный указатель на неконстантный объект ...
Ф>//...инкапсулирующий неконстантный указатель на константный объект....
Ф>ТЬФУ! Ф>ГАДОСТЬ!
Ф>Это одна из причин того, что я всегда недолюбливал C++...
Здравствуйте, fin_81, Вы писали:
W>>Встречается повсеместно. Оверхед в сравнении с более современными языками может и есть, но это здесь не играет роли.
_>Константный указатель (*const) часто встречается? Не верю.
Поиск в проекте строки "* const " даёт 69 результатов для 790 файлов
Поиск в проекте строки "*const" даёт 763 результата в одном из файлов (больше нигде не встречается).
Всего в проекте 295163 строк.
Поиск по строке "class " выдаёт 1968 результатов.
Мда, действительно не часто. Оно и понятно. Делать указатель константным всё равно, что писать const перед интом в параметре функции:
Здравствуйте, Abyx, Вы писали:
A>Здравствуйте, Философ, Вы писали:
>>>Константный указатель на неконстантный объект ...
Ф>>//...инкапсулирующий неконстантный указатель на константный объект....
Ф>>ТЬФУ! Ф>>ГАДОСТЬ!
Ф>>Это одна из причин того, что я всегда недолюбливал C++...
A>да Вы просто ниасилили.
Осилил, помогли осилить, а что-то и заставили осилить. Однако...
Всё сказанное выше — личное мнение, если не указано обратное.
On 02/01/2012 11:57 AM, Erop wrote:
> аналогичная терминология используется и в случае "константных ссылок", кстати
Аналогичной она не может быть в принципе, поскольку ссылка -- это константный,
автоматически разименуемый компилятором указатель, поэтому константностью
может в случае ссылки обладать только то, на что ссылка ссылается.
Там хоть как говори -- не запутаешься.