Если ваш вопрос не влез ни в одну из вышеперечисленных тем, вам сюда.
Ответить

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

Вс фев 13, 2022 07:06:25

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

Ссылки были введены в С++ как отдельный тип для более жесткого контроля на этапе компиляции и по сути являются урезанными в своих возможностях указателями.

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

Вс фев 13, 2022 08:51:09

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

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

Вс фев 13, 2022 09:10:25

Главная ошибка - упрощать понятие ссылки в С++. Ну хотя бы по тому, что их два типа есть
Код:
A a;
A& a_ref1 = a;   // это lvalue ссылка
A&& a_ref2 = a;  // это rvalue ссылка
И уж точно это не "порезанный указатель".
В базовом курсе по С++ лекции по ссылкам это 2-3 часа. И это не самые простые для понимания лекции, потому что на ссылках основано копирование и перемещение обычных и временных объектов. Это про кишки плюсов. В отличии от лямбды, которая выглядит ужасно, но проста по сути, ссылки наоборот выглядят просто но внутри ужас. Вот, как-то так.

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

Вс фев 13, 2022 15:45:11

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

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

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

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

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

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

Я к тому, что современный С++ имеет колоссальное число возможностей. Это хорошо. Но пытаться их использовать где не надо это плохо.

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

Вс фев 13, 2022 22:55:07

Ну что я могу сказать... Меньше знаешь - крепче спишь. Хотите считать ссылки указателем, да пожалуйста. Только держите это в тайне.

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

Пн фев 14, 2022 05:43:37

Ну что я могу сказать... Меньше знаешь - крепче спишь. Хотите считать ссылки указателем, да пожалуйста. Только держите это в тайне.


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

Вот цитаты, например, из учебников и статей:

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

Очевидной реализацией ссылки является (константный) указатель, при каждом использовании которого происходит разыменование.
(С) Страуструп
.....
На языке C++ есть ссылки (reference), и есть указатели (pointer). В сущности ссылки являются синтаксическим "бантиком" над указателями, упрощающим чтение и написание кода.
.....

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

Пн фев 14, 2022 09:17:39

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

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

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

Пн фев 14, 2022 09:54:21

О, я смотрю тут уже комитет по стандартизации образовался, большинством решают что же такое ссылка :))) Ну-Ну.

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

Пн фев 14, 2022 10:35:47

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

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

Пн фев 14, 2022 11:18:02

Для понимания надо почитать статьи и послушать лекции, а не убеждать меня :)

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

Пн фев 14, 2022 12:08:20

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

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

Пн фев 14, 2022 13:53:02

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

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

В общем, всё хорошо в меру.

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

Пн фев 14, 2022 14:31:16

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

Но пишут говнокодный говнокод, потому что сути этих стандартов - не понимают. Для них это как священное писание - "делай так, а так не делай". А ответ на вопрос "почему" - их не интересует.
Так вы же сами их плодите, упрощая ссылки до указателей. И вообще, зачем проецировать ваших говнокодеров на других? Может лучше равняться на профи?

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

Пн фев 14, 2022 15:20:14

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

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

Пн фев 14, 2022 15:38:45

взялись говорить, так объясняйте.
Я взялся объяснять? Может начать прочтение с первого сообщения этой страницы темы? Ась?

а вот это ваше "ну-ну" - оно для чего?
Я оппонирую объясняющему, указывая на неполное понимание. Когда меня начинают убеждать ссылаясь на каких-то мифических говнокодеров, то мне ничего не остаётся как
уязвить тех, кто не по 30 лет штудировал стандарты?

по-моему, это не хорошо.
Это интернет, тут могут и на послать :)

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

Пн фев 14, 2022 15:42:45

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

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

Пн фев 14, 2022 16:12:19

в чем смысл оппонирования без объяснения?
Смысл в том чтобы те кто не сильно в этом понимает не принимали написанное за истину. А то прочитают "ссылки это константные указатили" и пойдут говнокодить. А объяснять я не берусь, потому что не смогу это сделать как профессионалы, чьи лекции я предлагаю послушать. Да и не обязан. А может просто не хочу, имею право?

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

Пн фев 14, 2022 19:28:15

Так вы же сами их плодите, упрощая ссылки до указателей. И вообще, зачем проецировать ваших говнокодеров на других? Может лучше равняться на профи?


А зачем усложнять то, что можно понять просто? :) понять ссылки, если знаешь их предков - указателей - очень просто.

Кто такие "профи"? Те кто знает наизусть все стандарты? Таких практически нет. Да и меняются они часто.

Или тех, кто может решить поставленную задачу?

Тут ведь как.. Или ты "профи по правой ноздре" - знаешь все от и до о чемто локальном. Или ты знаешь о многих вещах, но не глубоко.

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

В 99% случаев проблемы решения задач не в том, какую ссылку будет пронраммист использовать, а в знании им предметной области.

Ну вот появились в С++ ссылки. Это произвело революцию? Нет. Ибо все то же делалось ранее с помощью указателей. Стал ли код более безопасным? Да.

Появились rvalue ссылки. То же самое. Революции не произошло, но удобств подкинули.

Это я к тому, что профи или непрофи не определяется знанием особенностей последнего стандарта чего либо.

Добавлено after 3 minutes 45 seconds:
Конечно, проще зарыть голову в песок, сказать что никаких правых ссылок, временных объектов и перемещений нет и считать ссылки указателями.


Временные объекты были даже в С:) ну например автоматические переменные:)

И в С++ они есть помимо ссылок.

Вы всерьез считаете, что если ктото по привычке не пользуется правыми ссылками, то он сразу перестал быть профи? :)

Добавлено after 2 minutes 11 seconds:
. А то прочитают "ссылки это константные указатили" и пойдут говнокодить. А объяснять я не берусь, потому что не смогу это сделать как профессионалы, чьи лекции я предлагаю послушать. Да и не обязан. А может просто не хочу, имею право?


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

Или он не профи уже?

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

Пн фев 14, 2022 20:09:14

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

Не хотите знать лишнего - ваше дело. Другим то это зачем навязывать?

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

Пн фев 14, 2022 20:12:53

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

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