Ссылки были введены в С++ как отдельный тип для более жесткого контроля на этапе компиляции и по сути являются урезанными в своих возможностях указателями.
Вопросы по С/С++ (СИ)
Ссылка и указатель по сути одно и тоже - адрес памяти, по которому хранится значение. И так оно и реализовано во всех известных мне компиляторах С++.
Ссылки были введены в С++ как отдельный тип для более жесткого контроля на этапе компиляции и по сути являются урезанными в своих возможностях указателями.
Ссылки были введены в С++ как отдельный тип для более жесткого контроля на этапе компиляции и по сути являются урезанными в своих возможностях указателями.
- Реклама
мне показалось, что ссылка - это указатель, автоматически (т.е. без отдельных операторов) разыменованный, отсюда и контроль типа, на который он указывает. так ли это?
если рассматривать человека снизу, покажется, что мозг у него глубоко в жопе
при взгляде на многих сверху ничего не меняется...
Мой уютный бложик... заходите!
при взгляде на многих сверху ничего не меняется...
Мой уютный бложик... заходите!
- Сообщения: 2562
- Зарегистрирован: Вт май 01, 2018 19:44:47
Главная ошибка - упрощать понятие ссылки в С++. Ну хотя бы по тому, что их два типа есть
И уж точно это не "порезанный указатель".
В базовом курсе по С++ лекции по ссылкам это 2-3 часа. И это не самые простые для понимания лекции, потому что на ссылках основано копирование и перемещение обычных и временных объектов. Это про кишки плюсов. В отличии от лямбды, которая выглядит ужасно, но проста по сути, ссылки наоборот выглядят просто но внутри ужас. Вот, как-то так.
Код: Выделить всё
A a;
A& a_ref1 = a; // это lvalue ссылка
A&& a_ref2 = a; // это rvalue ссылкаВ базовом курсе по С++ лекции по ссылкам это 2-3 часа. И это не самые простые для понимания лекции, потому что на ссылках основано копирование и перемещение обычных и временных объектов. Это про кишки плюсов. В отличии от лямбды, которая выглядит ужасно, но проста по сути, ссылки наоборот выглядят просто но внутри ужас. Вот, как-то так.
До С++11 rvalue ссылок не было.
Надо зрить в корень. Ссылки пошли от указателей и внутри ими и являются. А то, что компилятор умеет с ним работать по особым правилом на основе знания о типах это вторично. Хотя, конечно, эти правила надо знать. Как и отличия ссылки от указателя.
Добавлено after 31 minute 22 seconds:
А вообще, главное не переусложнять программы, ИМХО.
Наблюдал код, где молодой программист все делал "по последнему слову С++". Не потому что так надо, а потому что "он это знает и это круто".
Это писец, дорогая редакция:)
Шаблон классом погоняет, блин... В итоге через неделю он сам не смог объяснить как что работает.
Я к тому, что современный С++ имеет колоссальное число возможностей. Это хорошо. Но пытаться их использовать где не надо это плохо.
Надо зрить в корень. Ссылки пошли от указателей и внутри ими и являются. А то, что компилятор умеет с ним работать по особым правилом на основе знания о типах это вторично. Хотя, конечно, эти правила надо знать. Как и отличия ссылки от указателя.
Добавлено after 31 minute 22 seconds:
А вообще, главное не переусложнять программы, ИМХО.
Наблюдал код, где молодой программист все делал "по последнему слову С++". Не потому что так надо, а потому что "он это знает и это круто".
Это писец, дорогая редакция:)
Шаблон классом погоняет, блин... В итоге через неделю он сам не смог объяснить как что работает.
Я к тому, что современный С++ имеет колоссальное число возможностей. Это хорошо. Но пытаться их использовать где не надо это плохо.
- Сообщения: 2562
- Зарегистрирован: Вт май 01, 2018 19:44:47
Ну что я могу сказать... Меньше знаешь - крепче спишь. Хотите считать ссылки указателем, да пожалуйста. Только держите это в тайне.
- Реклама
[uquote="VladislavS",url="/forum/viewtopic.php?p=4180536#p4180536"]Ну что я могу сказать... Меньше знаешь - крепче спишь. Хотите считать ссылки указателем, да пожалуйста. Только держите это в тайне.[/uquote]
Я сказал "ссылки произошли от указателей". Что, кстати, и написано в учебниках по С++ некоторых. И внутри (в реализации) ссылки и указатели - суть есть адреса памяти. Но это не значит, что ссылки и указатели - это одно и тоже.
Вот цитаты, например, из учебников и статей:
Я сказал "ссылки произошли от указателей". Что, кстати, и написано в учебниках по С++ некоторых. И внутри (в реализации) ссылки и указатели - суть есть адреса памяти. Но это не значит, что ссылки и указатели - это одно и тоже.
Вот цитаты, например, из учебников и статей:
Указатель — старший родственник ссылки.
......
Ссылки — это то же самое, что и указатели, но с другим синтаксисом и некоторыми другими важными отличиями, о которых речь пойдёт дальше.
.....
Очевидной реализацией ссылки является (константный) указатель, при каждом использовании которого происходит разыменование.
(С) Страуструп
.....
На языке C++ есть ссылки (reference), и есть указатели (pointer). В сущности ссылки являются синтаксическим "бантиком" над указателями, упрощающим чтение и написание кода.
.....
что я и говорилSfS писал(а):Очевидной реализацией ссылки является (константный) указатель, при каждом использовании которого происходит разыменование.
(С) Страуструп
в паскале тоже переменная-экземпляр класса по умолчанию является ссылкой (в терминах С++), т.е. если указатель на обычню переменную в функцию передается в таком виде procedure foo(var a : typevar); то экземпляр класса передается уже как procedure foo(a : typeclass); то есть без var (что в данном контексте не что иное, как требование разыменовывать внутри функции указатель).
если рассматривать человека снизу, покажется, что мозг у него глубоко в жопе
при взгляде на многих сверху ничего не меняется...
Мой уютный бложик... заходите!
при взгляде на многих сверху ничего не меняется...
Мой уютный бложик... заходите!
- Сообщения: 2562
- Зарегистрирован: Вт май 01, 2018 19:44:47
О, я смотрю тут уже комитет по стандартизации образовался, большинством решают что же такое ссылка
Ну-Ну.
Речь не о стандартах, а о понимании стандартов. Все равно не понимая ничего путнего не сделать
если рассматривать человека снизу, покажется, что мозг у него глубоко в жопе
при взгляде на многих сверху ничего не меняется...
Мой уютный бложик... заходите!
при взгляде на многих сверху ничего не меняется...
Мой уютный бложик... заходите!
- Сообщения: 2562
- Зарегистрирован: Вт май 01, 2018 19:44:47
Кажется, кто-то не глупый говорил, что если вы не можете объяснить что-то непрофессионалу, то вы и сам непрофессионал. Становиться пофи не каждому надо, но минимальное понимание не помешало бы многим. И рекомендации слушать лекции и ходить на курсы тут неуместны, имхо.
если рассматривать человека снизу, покажется, что мозг у него глубоко в жопе
при взгляде на многих сверху ничего не меняется...
Мой уютный бложик... заходите!
при взгляде на многих сверху ничего не меняется...
Мой уютный бложик... заходите!
90% "нового" в IT это хорошо забытое, а то и просто переименованное старое.
Стандарты хороши, но и суть происходящего понимать не помешает. Я знаю некоторых товарищей, которые зазубрили тучу стандартов. В том числе и С++. Но пишут говнокодный говнокод, потому что сути этих стандартов - не понимают. Для них это как священное писание - "делай так, а так не делай". А ответ на вопрос "почему" - их не интересует.
В общем, всё хорошо в меру.
Стандарты хороши, но и суть происходящего понимать не помешает. Я знаю некоторых товарищей, которые зазубрили тучу стандартов. В том числе и С++. Но пишут говнокодный говнокод, потому что сути этих стандартов - не понимают. Для них это как священное писание - "делай так, а так не делай". А ответ на вопрос "почему" - их не интересует.
В общем, всё хорошо в меру.
- Сообщения: 2562
- Зарегистрирован: Вт май 01, 2018 19:44:47
[uquote="ARV",url="/forum/viewtopic.php?p=4180773#p4180773"]Становиться пофи не каждому надо, но минимальное понимание не помешало бы многим.[/uquote]Это не самый простой для понимания раздел языка, нужна хорошая подготовка чтобы его понять и тем более объяснить.
[uquote="ARV",url="/forum/viewtopic.php?p=4180773#p4180773"]И рекомендации слушать лекции и ходить на курсы тут неуместны, имхо.[/uquote]Конечно, проще зарыть голову в песок, сказать что никаких правых ссылок, временных объектов и перемещений нет и считать ссылки указателями.
[uquote="SfS",url="/forum/viewtopic.php?p=4180844#p4180844"]Но пишут говнокодный говнокод, потому что сути этих стандартов - не понимают. Для них это как священное писание - "делай так, а так не делай". А ответ на вопрос "почему" - их не интересует.[/uquote]Так вы же сами их плодите, упрощая ссылки до указателей. И вообще, зачем проецировать ваших говнокодеров на других? Может лучше равняться на профи?
[uquote="ARV",url="/forum/viewtopic.php?p=4180773#p4180773"]И рекомендации слушать лекции и ходить на курсы тут неуместны, имхо.[/uquote]Конечно, проще зарыть голову в песок, сказать что никаких правых ссылок, временных объектов и перемещений нет и считать ссылки указателями.
[uquote="SfS",url="/forum/viewtopic.php?p=4180844#p4180844"]Но пишут говнокодный говнокод, потому что сути этих стандартов - не понимают. Для них это как священное писание - "делай так, а так не делай". А ответ на вопрос "почему" - их не интересует.[/uquote]Так вы же сами их плодите, упрощая ссылки до указателей. И вообще, зачем проецировать ваших говнокодеров на других? Может лучше равняться на профи?
ну и тогда к чему об этом говорить на форуме любителей? взялись говорить, так объясняйте. а вот это ваше "ну-ну" - оно для чего? чтобы уязвить тех, кто не по 30 лет штудировал стандарты? по-моему, это не хорошо.VladislavS писал(а):нужна хорошая подготовка чтобы его понять и тем более объяснить
если рассматривать человека снизу, покажется, что мозг у него глубоко в жопе
при взгляде на многих сверху ничего не меняется...
Мой уютный бложик... заходите!
при взгляде на многих сверху ничего не меняется...
Мой уютный бложик... заходите!
- Сообщения: 2562
- Зарегистрирован: Вт май 01, 2018 19:44:47
[uquote="ARV",url="/forum/viewtopic.php?p=4180888#p4180888"]взялись говорить, так объясняйте.[/uquote]Я взялся объяснять? Может начать прочтение с первого сообщения этой страницы темы? Ась?
[uquote="ARV",url="/forum/viewtopic.php?p=4180888#p4180888"]а вот это ваше "ну-ну" - оно для чего?[/uquote]Я оппонирую объясняющему, указывая на неполное понимание. Когда меня начинают убеждать ссылаясь на каких-то мифических говнокодеров, то мне ничего не остаётся как
[uquote="ARV",url="/forum/viewtopic.php?p=4180888#p4180888"]уязвить тех, кто не по 30 лет штудировал стандарты?[/uquote]
[uquote="ARV",url="/forum/viewtopic.php?p=4180888#p4180888"]по-моему, это не хорошо.[/uquote]Это интернет, тут могут и на послать
[uquote="ARV",url="/forum/viewtopic.php?p=4180888#p4180888"]а вот это ваше "ну-ну" - оно для чего?[/uquote]Я оппонирую объясняющему, указывая на неполное понимание. Когда меня начинают убеждать ссылаясь на каких-то мифических говнокодеров, то мне ничего не остаётся как
[uquote="ARV",url="/forum/viewtopic.php?p=4180888#p4180888"]уязвить тех, кто не по 30 лет штудировал стандарты?[/uquote]
[uquote="ARV",url="/forum/viewtopic.php?p=4180888#p4180888"]по-моему, это не хорошо.[/uquote]Это интернет, тут могут и на послать
вы этого и добиваетесь, что ли?VladislavS писал(а):тут могут и на послать
в чем смысл оппонирования без объяснения? ЧСВ почесать?VladislavS писал(а):Я оппонирую объясняющему, указывая на неполное понимание.
тут и без вас все мало чего понимают, и лишний раз напоминать об этом - неконструктивно. см. п.1
если рассматривать человека снизу, покажется, что мозг у него глубоко в жопе
при взгляде на многих сверху ничего не меняется...
Мой уютный бложик... заходите!
при взгляде на многих сверху ничего не меняется...
Мой уютный бложик... заходите!
- Сообщения: 2562
- Зарегистрирован: Вт май 01, 2018 19:44:47
[uquote="ARV",url="/forum/viewtopic.php?p=4180906#p4180906"]в чем смысл оппонирования без объяснения?[/uquote]Смысл в том чтобы те кто не сильно в этом понимает не принимали написанное за истину. А то прочитают "ссылки это константные указатили" и пойдут говнокодить. А объяснять я не берусь, потому что не смогу это сделать как профессионалы, чьи лекции я предлагаю послушать. Да и не обязан. А может просто не хочу, имею право?
[uquote="VladislavS",url="/forum/viewtopic.php?p=4180869#p4180869"]Так вы же сами их плодите, упрощая ссылки до указателей. И вообще, зачем проецировать ваших говнокодеров на других? Может лучше равняться на профи?[/uquote]
А зачем усложнять то, что можно понять просто?
понять ссылки, если знаешь их предков - указателей - очень просто.
Кто такие "профи"? Те кто знает наизусть все стандарты? Таких практически нет. Да и меняются они часто.
Или тех, кто может решить поставленную задачу?
Тут ведь как.. Или ты "профи по правой ноздре" - знаешь все от и до о чемто локальном. Или ты знаешь о многих вещах, но не глубоко.
И в жизни второе обычно лучше, чем первое. Ибо широкий кругозор позволяет выбрать инструмент под задачу, а потом, при необходимости, его более подробно изучить.
В 99% случаев проблемы решения задач не в том, какую ссылку будет пронраммист использовать, а в знании им предметной области.
Ну вот появились в С++ ссылки. Это произвело революцию? Нет. Ибо все то же делалось ранее с помощью указателей. Стал ли код более безопасным? Да.
Появились rvalue ссылки. То же самое. Революции не произошло, но удобств подкинули.
Это я к тому, что профи или непрофи не определяется знанием особенностей последнего стандарта чего либо.
Добавлено after 3 minutes 45 seconds:
[uquote="VladislavS",url="/forum/viewtopic.php?p=4180869#p4180869"]Конечно, проще зарыть голову в песок, сказать что никаких правых ссылок, временных объектов и перемещений нет и считать ссылки указателями.[/uquote]
Временные объекты были даже в С:) ну например автоматические переменные:)
И в С++ они есть помимо ссылок.
Вы всерьез считаете, что если ктото по привычке не пользуется правыми ссылками, то он сразу перестал быть профи?
Добавлено after 2 minutes 11 seconds:
[uquote="VladislavS",url="/forum/viewtopic.php?p=4180933#p4180933"]. А то прочитают "ссылки это константные указатили" и пойдут говнокодить. А объяснять я не берусь, потому что не смогу это сделать как профессионалы, чьи лекции я предлагаю послушать. Да и не обязан. А может просто не хочу, имею право?[/uquote]
Простите, а Страуструп тоже врет? Ну что ссылка это эквивалент константного указателя?
Или он не профи уже?
А зачем усложнять то, что можно понять просто?
Кто такие "профи"? Те кто знает наизусть все стандарты? Таких практически нет. Да и меняются они часто.
Или тех, кто может решить поставленную задачу?
Тут ведь как.. Или ты "профи по правой ноздре" - знаешь все от и до о чемто локальном. Или ты знаешь о многих вещах, но не глубоко.
И в жизни второе обычно лучше, чем первое. Ибо широкий кругозор позволяет выбрать инструмент под задачу, а потом, при необходимости, его более подробно изучить.
В 99% случаев проблемы решения задач не в том, какую ссылку будет пронраммист использовать, а в знании им предметной области.
Ну вот появились в С++ ссылки. Это произвело революцию? Нет. Ибо все то же делалось ранее с помощью указателей. Стал ли код более безопасным? Да.
Появились rvalue ссылки. То же самое. Революции не произошло, но удобств подкинули.
Это я к тому, что профи или непрофи не определяется знанием особенностей последнего стандарта чего либо.
Добавлено after 3 minutes 45 seconds:
[uquote="VladislavS",url="/forum/viewtopic.php?p=4180869#p4180869"]Конечно, проще зарыть голову в песок, сказать что никаких правых ссылок, временных объектов и перемещений нет и считать ссылки указателями.[/uquote]
Временные объекты были даже в С:) ну например автоматические переменные:)
И в С++ они есть помимо ссылок.
Вы всерьез считаете, что если ктото по привычке не пользуется правыми ссылками, то он сразу перестал быть профи?
Добавлено after 2 minutes 11 seconds:
[uquote="VladislavS",url="/forum/viewtopic.php?p=4180933#p4180933"]. А то прочитают "ссылки это константные указатили" и пойдут говнокодить. А объяснять я не берусь, потому что не смогу это сделать как профессионалы, чьи лекции я предлагаю послушать. Да и не обязан. А может просто не хочу, имею право?[/uquote]
Простите, а Страуструп тоже врет? Ну что ссылка это эквивалент константного указателя?
Или он не профи уже?
- Сообщения: 2562
- Зарегистрирован: Вт май 01, 2018 19:44:47
А может не постесьняться и указать год, когда Бьярне это сказал? И не дёрнуть обрывок, а закончить цитату полностью? А потом посмотреть количество изменений, внесённых после этого в стандарт.
Не хотите знать лишнего - ваше дело. Другим то это зачем навязывать?
Не хотите знать лишнего - ваше дело. Другим то это зачем навязывать?
- Сообщения: 2089
- Зарегистрирован: Вс июн 19, 2016 09:32:03
[uquote="SfS",url="/forum/viewtopic.php?p=4181104#p4181104"]Простите, а Страуструп тоже врет? Ну что ссылка это эквивалент константного указателя?[/uquote]
Попытался нагуглить где он такое говорил и практически сходу наткнулся на одну статью
Попытался нагуглить где он такое говорил и практически сходу наткнулся на одну статью
Код: Выделить всё
Достаточно традиционный взгляд — это считать ссылку «замаскированным» константным указателем. Но Страуструп и другие авторы, например Стефан Дьюхэрст, считают такую точку зрения неверной и настаивают, что ссылка — это просто псевдоним переменой, на которую она ссылается.


