Вопросы по С/С++ (СИ)

Если ваш вопрос не влез ни в одну из вышеперечисленных тем, вам сюда.
Ответить
SfS
Друг Кота
Сообщения: 19429
Зарегистрирован: Пт янв 12, 2007 11:21:39
Откуда: Томск

Сообщение SfS »

Ссылка и указатель по сути одно и тоже - адрес памяти, по которому хранится значение. И так оно и реализовано во всех известных мне компиляторах С++.

Ссылки были введены в С++ как отдельный тип для более жесткого контроля на этапе компиляции и по сути являются урезанными в своих возможностях указателями.
Реклама
ARV
Ум, честь и совесть. И скромность.
Аватара пользователя
Сообщения: 18678
Зарегистрирован: Чт дек 28, 2006 08:19:56
Откуда: Новочеркасск

Сообщение ARV »

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

Мой уютный бложик... заходите!
Контактная информация:
Реклама
Собутыльник Кота
Аватара пользователя
Сообщения: 2562
Зарегистрирован: Вт май 01, 2018 19:44:47

Сообщение VladislavS »

Главная ошибка - упрощать понятие ссылки в С++. Ну хотя бы по тому, что их два типа есть

Код: Выделить всё

A a;
A& a_ref1 = a;   // это lvalue ссылка
A&& a_ref2 = a;  // это rvalue ссылка
И уж точно это не "порезанный указатель".
В базовом курсе по С++ лекции по ссылкам это 2-3 часа. И это не самые простые для понимания лекции, потому что на ссылках основано копирование и перемещение обычных и временных объектов. Это про кишки плюсов. В отличии от лямбды, которая выглядит ужасно, но проста по сути, ссылки наоборот выглядят просто но внутри ужас. Вот, как-то так.
SfS
Друг Кота
Сообщения: 19429
Зарегистрирован: Пт янв 12, 2007 11:21:39
Откуда: Томск

Сообщение SfS »

До С++11 rvalue ссылок не было.

Надо зрить в корень. Ссылки пошли от указателей и внутри ими и являются. А то, что компилятор умеет с ним работать по особым правилом на основе знания о типах это вторично. Хотя, конечно, эти правила надо знать. Как и отличия ссылки от указателя.

Добавлено after 31 minute 22 seconds:
А вообще, главное не переусложнять программы, ИМХО.

Наблюдал код, где молодой программист все делал "по последнему слову С++". Не потому что так надо, а потому что "он это знает и это круто".

Это писец, дорогая редакция:)

Шаблон классом погоняет, блин... В итоге через неделю он сам не смог объяснить как что работает.

Я к тому, что современный С++ имеет колоссальное число возможностей. Это хорошо. Но пытаться их использовать где не надо это плохо.
Реклама
Эиком - электронные компоненты и радиодетали
Собутыльник Кота
Аватара пользователя
Сообщения: 2562
Зарегистрирован: Вт май 01, 2018 19:44:47

Сообщение VladislavS »

Ну что я могу сказать... Меньше знаешь - крепче спишь. Хотите считать ссылки указателем, да пожалуйста. Только держите это в тайне.
Реклама
SfS
Друг Кота
Сообщения: 19429
Зарегистрирован: Пт янв 12, 2007 11:21:39
Откуда: Томск

Сообщение SfS »

[uquote="VladislavS",url="/forum/viewtopic.php?p=4180536#p4180536"]Ну что я могу сказать... Меньше знаешь - крепче спишь. Хотите считать ссылки указателем, да пожалуйста. Только держите это в тайне.[/uquote]

Я сказал "ссылки произошли от указателей". Что, кстати, и написано в учебниках по С++ некоторых. И внутри (в реализации) ссылки и указатели - суть есть адреса памяти. Но это не значит, что ссылки и указатели - это одно и тоже.

Вот цитаты, например, из учебников и статей:
Указатель — старший родственник ссылки.
......
Ссылки — это то же самое, что и указатели, но с другим синтаксисом и некоторыми другими важными отличиями, о которых речь пойдёт дальше.
.....

Очевидной реализацией ссылки является (константный) указатель, при каждом использовании которого происходит разыменование.
(С) Страуструп
.....
На языке C++ есть ссылки (reference), и есть указатели (pointer). В сущности ссылки являются синтаксическим "бантиком" над указателями, упрощающим чтение и написание кода.
.....
Реклама
ARV
Ум, честь и совесть. И скромность.
Аватара пользователя
Сообщения: 18678
Зарегистрирован: Чт дек 28, 2006 08:19:56
Откуда: Новочеркасск

Сообщение ARV »

SfS писал(а):Очевидной реализацией ссылки является (константный) указатель, при каждом использовании которого происходит разыменование.
(С) Страуструп
что я и говорил

в паскале тоже переменная-экземпляр класса по умолчанию является ссылкой (в терминах С++), т.е. если указатель на обычню переменную в функцию передается в таком виде procedure foo(var a : typevar); то экземпляр класса передается уже как procedure foo(a : typeclass); то есть без var (что в данном контексте не что иное, как требование разыменовывать внутри функции указатель).
если рассматривать человека снизу, покажется, что мозг у него глубоко в жопе
при взгляде на многих сверху ничего не меняется...

Мой уютный бложик... заходите!
Контактная информация:
Собутыльник Кота
Аватара пользователя
Сообщения: 2562
Зарегистрирован: Вт май 01, 2018 19:44:47

Сообщение VladislavS »

О, я смотрю тут уже комитет по стандартизации образовался, большинством решают что же такое ссылка :))) Ну-Ну.
ARV
Ум, честь и совесть. И скромность.
Аватара пользователя
Сообщения: 18678
Зарегистрирован: Чт дек 28, 2006 08:19:56
Откуда: Новочеркасск

Сообщение ARV »

Речь не о стандартах, а о понимании стандартов. Все равно не понимая ничего путнего не сделать
если рассматривать человека снизу, покажется, что мозг у него глубоко в жопе
при взгляде на многих сверху ничего не меняется...

Мой уютный бложик... заходите!
Контактная информация:
Собутыльник Кота
Аватара пользователя
Сообщения: 2562
Зарегистрирован: Вт май 01, 2018 19:44:47

Сообщение VladislavS »

Для понимания надо почитать статьи и послушать лекции, а не убеждать меня :)
ARV
Ум, честь и совесть. И скромность.
Аватара пользователя
Сообщения: 18678
Зарегистрирован: Чт дек 28, 2006 08:19:56
Откуда: Новочеркасск

Сообщение ARV »

Кажется, кто-то не глупый говорил, что если вы не можете объяснить что-то непрофессионалу, то вы и сам непрофессионал. Становиться пофи не каждому надо, но минимальное понимание не помешало бы многим. И рекомендации слушать лекции и ходить на курсы тут неуместны, имхо.
если рассматривать человека снизу, покажется, что мозг у него глубоко в жопе
при взгляде на многих сверху ничего не меняется...

Мой уютный бложик... заходите!
Контактная информация:
SfS
Друг Кота
Сообщения: 19429
Зарегистрирован: Пт янв 12, 2007 11:21:39
Откуда: Томск

Сообщение SfS »

90% "нового" в IT это хорошо забытое, а то и просто переименованное старое.

Стандарты хороши, но и суть происходящего понимать не помешает. Я знаю некоторых товарищей, которые зазубрили тучу стандартов. В том числе и С++. Но пишут говнокодный говнокод, потому что сути этих стандартов - не понимают. Для них это как священное писание - "делай так, а так не делай". А ответ на вопрос "почему" - их не интересует.

В общем, всё хорошо в меру.
Собутыльник Кота
Аватара пользователя
Сообщения: 2562
Зарегистрирован: Вт май 01, 2018 19:44:47

Сообщение VladislavS »

[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]Так вы же сами их плодите, упрощая ссылки до указателей. И вообще, зачем проецировать ваших говнокодеров на других? Может лучше равняться на профи?
ARV
Ум, честь и совесть. И скромность.
Аватара пользователя
Сообщения: 18678
Зарегистрирован: Чт дек 28, 2006 08:19:56
Откуда: Новочеркасск

Сообщение ARV »

VladislavS писал(а):нужна хорошая подготовка чтобы его понять и тем более объяснить
ну и тогда к чему об этом говорить на форуме любителей? взялись говорить, так объясняйте. а вот это ваше "ну-ну" - оно для чего? чтобы уязвить тех, кто не по 30 лет штудировал стандарты? по-моему, это не хорошо.
если рассматривать человека снизу, покажется, что мозг у него глубоко в жопе
при взгляде на многих сверху ничего не меняется...

Мой уютный бложик... заходите!
Контактная информация:
Собутыльник Кота
Аватара пользователя
Сообщения: 2562
Зарегистрирован: Вт май 01, 2018 19:44:47

Сообщение VladislavS »

[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]Это интернет, тут могут и на послать :)
ARV
Ум, честь и совесть. И скромность.
Аватара пользователя
Сообщения: 18678
Зарегистрирован: Чт дек 28, 2006 08:19:56
Откуда: Новочеркасск

Сообщение ARV »

VladislavS писал(а):тут могут и на послать
вы этого и добиваетесь, что ли?
VladislavS писал(а):Я оппонирую объясняющему, указывая на неполное понимание.
в чем смысл оппонирования без объяснения? ЧСВ почесать?
тут и без вас все мало чего понимают, и лишний раз напоминать об этом - неконструктивно. см. п.1
если рассматривать человека снизу, покажется, что мозг у него глубоко в жопе
при взгляде на многих сверху ничего не меняется...

Мой уютный бложик... заходите!
Контактная информация:
Собутыльник Кота
Аватара пользователя
Сообщения: 2562
Зарегистрирован: Вт май 01, 2018 19:44:47

Сообщение VladislavS »

[uquote="ARV",url="/forum/viewtopic.php?p=4180906#p4180906"]в чем смысл оппонирования без объяснения?[/uquote]Смысл в том чтобы те кто не сильно в этом понимает не принимали написанное за истину. А то прочитают "ссылки это константные указатили" и пойдут говнокодить. А объяснять я не берусь, потому что не смогу это сделать как профессионалы, чьи лекции я предлагаю послушать. Да и не обязан. А может просто не хочу, имею право?
SfS
Друг Кота
Сообщения: 19429
Зарегистрирован: Пт янв 12, 2007 11:21:39
Откуда: Томск

Сообщение SfS »

[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]

Простите, а Страуструп тоже врет? Ну что ссылка это эквивалент константного указателя?

Или он не профи уже?
Собутыльник Кота
Аватара пользователя
Сообщения: 2562
Зарегистрирован: Вт май 01, 2018 19:44:47

Сообщение VladislavS »

А может не постесьняться и указать год, когда Бьярне это сказал? И не дёрнуть обрывок, а закончить цитату полностью? А потом посмотреть количество изменений, внесённых после этого в стандарт.

Не хотите знать лишнего - ваше дело. Другим то это зачем навязывать?
Поставщик валерьянки для Кота
Сообщения: 2089
Зарегистрирован: Вс июн 19, 2016 09:32:03

Сообщение Reflector »

[uquote="SfS",url="/forum/viewtopic.php?p=4181104#p4181104"]Простите, а Страуструп тоже врет? Ну что ссылка это эквивалент константного указателя?[/uquote]
Попытался нагуглить где он такое говорил и практически сходу наткнулся на одну статью :)

Код: Выделить всё

Достаточно традиционный взгляд — это считать ссылку «замаскированным» константным указателем. Но Страуструп и другие авторы, например Стефан Дьюхэрст, считают такую точку зрения неверной и настаивают, что ссылка — это просто псевдоним переменой, на которую она ссылается.
Ответить

Вернуться в «Разные вопросы по МК»