Наши проекты:
Журнал · Discuz!ML · Wiki · DRKB · Помощь проекту |
||
ПРАВИЛА | FAQ | Помощь | Поиск | Участники | Календарь | Избранное | RSS |
[3.140.185.147] |
|
Страницы: (11) « Первая ... 9 10 [11] все ( Перейти к последнему сообщению ) |
Сообщ.
#151
,
|
|
|
Цитата Flex Ferrum @ То есть, говорить о пользе замены указателей на ссылки и наоборот с точки зрения оптимизации достаточно бессмысленно. Выбор между указателем и ссылкой дожен происходить с других точек зрения, например, безопасности или необходимости в свойствах недоступных собрату. Так сказать, указателю - указателево, а ссылке - ссылково. Указатели с большим скоупом в большинстве случаев вообще передаются по значению и их мутабельность/иммутабельность не важна совершенно.В данном конкретном синтетическом примере волатильность была применена для того, чтобы отключить оптимизатор на коротком участке программы. В реальности с высокой долей вероятности получится, что сферы использования указателей и ссылок будут сильно различаться. Причём указатели будут использоваться в гораздо более широких скоупах (нередко - совпадающих со скоупом всей программы), чем ссылки, именно за счёт своей овеществлённости. При таком раскладе предсказать возможность изменения (или неизменения) значения указателем становится сильно сложнее. А вот скоупы использования ссылок будут чаще всего уже (блок, функция или модуль), а потому и у компилятора информации может быть больше. Цитата Flex Ferrum @ А разве изменение такого констатного мембера класса по стандарту не UB? И хотя стандарт не требует выделения места под ссылку, подозреваю, что ссылки-члены класса вседа будут "засахаренными" Строго говоря - нет. Потому что есть const_cast, который к ссылкам (при всём желании) не применим. Цитата Flex Ferrum @ В этом плане да. Даже если компилятор мог оптимизировать указатель, но программист добавил изменение значения такого указателя, то оптимизация будет отменена. С ссылками такое не прокатит. Но опять же такой указатель на ссылку не заменишь.А за счёт неопределённости (в стандарте) на счёт того, занимают ссылки какое-то место или нет, ты даже с помощью грязных хаков сможешь поменять значения только тех ссылок, в которых ты точно уверен, что это засахаренные указатели. Цитата Flex Ferrum @ Ну в тезисе Qraizer'а замена указателей на ссылки таки присутствовала, ну да ладно, может быть он имел в виду именно то, о чем ты говоришь.В такой формулировке - да. Только вот начальный тезис был чуть другой: ссылки позволяют компилятору более агрессивно оптимизировать за счёт прибитой гвоздями иммутабельности и некоторых других свойств, которых у указателей нет. Эта тема была разделена из темы "D vs C++" |
Сообщ.
#152
,
|
|
|
Цитата applegame @ То есть, говорить о пользе замены указателей на ссылки и наоборот с точки зрения оптимизации достаточно бессмысленно. Ну как бы да. Да и речь начиналась именно с обсуждения их свойств с точки зрения оптимизации, а не замены одного на другое. А так, как мы выяснили, семантически (с точки зрения исходного текста и его понимания разработчиком, и стандарта) константный указатель не является эквивалентом ссылки в силу разницы в свойствах. Цитата applegame @ Так сказать, указателю - указателево, а ссылке - ссылково. Именно так. Более того, согласно Core Guidelines крен уже идёт в сторону не просто указателей, а умных указателей. То есть в С++-программе должны быть либо ссылки, либо unique/shared/xxx_ptr. Цитата applegame @ А разве изменение такого констатного мембера класса по стандарту не UB Угу. Но кого и когда это останавливало? Кроме того, стандарт говорит "вообще" об изменениях константных объектах. Если ты точно знаешь, что объект никогда не будет настолько константным, чтобы быть размещённым в защищённых от записи областях памяти, то трюки с const_cast вполне допустимы. Но их применение нередко указывает на проблемы в дизайне. |
Сообщ.
#153
,
|
|
|
Цитата Flex Ferrum @ Не знаю с чего оно там начиналось Похоже каждый начал обсуждать что-то свое.Да и речь начиналась именно с обсуждения их свойств с точки зрения оптимизации, а не замены одного на другое. И все-таки, не мог бы ты отделить обсуждение ссылок в отдельную холиварную тему? |