На главную
ПРАВИЛА FAQ Помощь Участники Календарь Избранное DigiMania RSS
msm.ru
! Правила раздела:
1. Название темы - краткое описание кто/что против кого/чего
2. В первом сообщении - список параметров, по которым идет сравнение.
3. Старайтесь аргументировать свои высказывания. Фразы типа "Венда/Слюникс - ацтой" считаются флудом.
4. Давайте жить дружно и не доводить обсуждение до маразма и личных оскорблений.
Модераторы: Модераторы, Комодераторы
Страницы: (11) « Первая ... 9 10 [11]  все  ( Перейти к последнему сообщению )  
> Баллада о ссылках в С++
    Цитата Flex Ferrum @
    В данном конкретном синтетическом примере волатильность была применена для того, чтобы отключить оптимизатор на коротком участке программы. В реальности с высокой долей вероятности получится, что сферы использования указателей и ссылок будут сильно различаться. Причём указатели будут использоваться в гораздо более широких скоупах (нередко - совпадающих со скоупом всей программы), чем ссылки, именно за счёт своей овеществлённости. При таком раскладе предсказать возможность изменения (или неизменения) значения указателем становится сильно сложнее. А вот скоупы использования ссылок будут чаще всего уже (блок, функция или модуль), а потому и у компилятора информации может быть больше.
    То есть, говорить о пользе замены указателей на ссылки и наоборот с точки зрения оптимизации достаточно бессмысленно. Выбор между указателем и ссылкой дожен происходить с других точек зрения, например, безопасности или необходимости в свойствах недоступных собрату. Так сказать, указателю - указателево, а ссылке - ссылково. Указатели с большим скоупом в большинстве случаев вообще передаются по значению и их мутабельность/иммутабельность не важна совершенно.
    Цитата Flex Ferrum @
    Строго говоря - нет. Потому что есть const_cast, который к ссылкам (при всём желании) не применим.
    А разве изменение такого констатного мембера класса по стандарту не UB? И хотя стандарт не требует выделения места под ссылку, подозреваю, что ссылки-члены класса вседа будут "засахаренными" константными иммутабельными указателями.
    Цитата Flex Ferrum @
    А за счёт неопределённости (в стандарте) на счёт того, занимают ссылки какое-то место или нет, ты даже с помощью грязных хаков сможешь поменять значения только тех ссылок, в которых ты точно уверен, что это засахаренные указатели.
    В этом плане да. Даже если компилятор мог оптимизировать указатель, но программист добавил изменение значения такого указателя, то оптимизация будет отменена. С ссылками такое не прокатит. Но опять же такой указатель на ссылку не заменишь.
    Цитата Flex Ferrum @
    В такой формулировке - да. Только вот начальный тезис был чуть другой: ссылки позволяют компилятору более агрессивно оптимизировать за счёт прибитой гвоздями иммутабельности и некоторых других свойств, которых у указателей нет.
    Ну в тезисе Qraizer'а замена указателей на ссылки таки присутствовала, ну да ладно, может быть он имел в виду именно то, о чем ты говоришь.

    Эта тема была разделена из темы "D vs C++"
    Сообщение отредактировано: applegame -
    error: 'long long long' is too long for GCC
      Цитата applegame @
      То есть, говорить о пользе замены указателей на ссылки и наоборот с точки зрения оптимизации достаточно бессмысленно.

      Ну как бы да. Да и речь начиналась именно с обсуждения их свойств с точки зрения оптимизации, а не замены одного на другое. А так, как мы выяснили, семантически (с точки зрения исходного текста и его понимания разработчиком, и стандарта) константный указатель не является эквивалентом ссылки в силу разницы в свойствах.

      Цитата applegame @
      Так сказать, указателю - указателево, а ссылке - ссылково.

      Именно так. Более того, согласно Core Guidelines крен уже идёт в сторону не просто указателей, а умных указателей. То есть в С++-программе должны быть либо ссылки, либо unique/shared/xxx_ptr.

      Цитата applegame @
      А разве изменение такого констатного мембера класса по стандарту не UB

      Угу. Но кого и когда это останавливало? Кроме того, стандарт говорит "вообще" об изменениях константных объектах. Если ты точно знаешь, что объект никогда не будет настолько константным, чтобы быть размещённым в защищённых от записи областях памяти, то трюки с const_cast вполне допустимы. Но их применение нередко указывает на проблемы в дизайне.
      Сообщение отредактировано: Flex Ferrum -
      "Математики думают, что Бог в уравнениях, нейрологи уверены, что Бог в мозге, а программисты уверены, что Бог — один из них."
      Морган Фриман
      Мой учебник C++ - это просто!
      Я на blogspot.com.
        Цитата Flex Ferrum @
        Да и речь начиналась именно с обсуждения их свойств с точки зрения оптимизации, а не замены одного на другое.
        Не знаю с чего оно там начиналось Похоже каждый начал обсуждать что-то свое.
        И все-таки, не мог бы ты отделить обсуждение ссылок в отдельную холиварную тему?
        Сообщение отредактировано: applegame -
        error: 'long long long' is too long for GCC
        1 пользователей читают эту тему (1 гостей и 0 скрытых пользователей)
        0 пользователей:


        Рейтинг@Mail.ru
        [ Script Execution time: 0,0939 ]   [ 14 queries used ]   [ Generated: 22.11.17, 13:11 GMT ]