Наши проекты:
Журнал · Discuz!ML · Wiki · DRKB · Помощь проекту |
||
ПРАВИЛА | FAQ | Помощь | Поиск | Участники | Календарь | Избранное | RSS |
[3.145.105.108] |
|
Страницы: (11) 1 [2] 3 4 ... 10 11 все ( Перейти к последнему сообщению ) |
Сообщ.
#16
,
|
|
|
Сообщ.
#17
,
|
|
|
Цитата Flex Ferrum @ Нет, нет, и ещё раз нет. Откуда вообще пошла эта дурь с тем, что ссылка - это синтаксический сахар для разыменованного указателя? В чём разница? Это сообщение было перенесено сюда или объединено из темы "D vs C++" |
Сообщ.
#18
,
|
|
|
Сообщ.
#19
,
|
|
|
Цитата OpenGL @ В чём разница? В том, что ссылка может (под капотом) стать указателем только в определённых случаях. Например, при передаче в функцию, принимающую ссылку. Но если ты в одной области видимости объявишь объект и ссылку на него, то ссылка указателем не станет, ибо в этом нет необходимости. Это сообщение было перенесено сюда или объединено из темы "D vs C++" |
Сообщ.
#20
,
|
|
|
Цитата Flex Ferrum @ Это все внутрикомпиляторные дела. Компилятор запросто может и разыменованный указатель соптимизировать и не создавать реальной переменной. А может и ссылку создать в виде указателя, если ему приспичит. Это не агрумент:В том, что ссылка может (под капотом) стать указателем только в определённых случаях. Например, при передаче в функцию, принимающую ссылку. Но если ты в одной области видимости объявишь объект и ссылку на него, то ссылка указателем не станет, ибо в этом нет необходимости. void foo(int& x) { int& y = x; y = 2; int* z = &x; z = 2; } Это сообщение было перенесено сюда или объединено из темы "D vs C++" |
Сообщ.
#21
,
|
|
|
Цитата applegame @ Ну это-то понятно. Естественно cool_real_number_having_long_mantissa_with_great_exponent их все имеет. Вопрос в том, как мне complex_number писать. Метакодом я могу напроксить себе какие-нибудь assgn() с нужными if (is(...)) и вместо =, но что-то для меня это как-то костыльно смотрится.Не совсем понимаю, что именно тебе нужно. Но подозреваю, что это делается аналогично плюсам. Например, специализацией перегруженных операторов. Это сообщение было перенесено сюда или объединено из темы "D vs C++" |
Сообщ.
#22
,
|
|
|
Цитата applegame @ Это все внутрикомпиляторные дела. Компилятор запросто может и разыменованный указатель соптимизировать и не создавать реальной переменной. А может и ссылку создать в виде указателя, если ему приспичит. Это не агрумент. Где-то в стандарте написано, что ссылка - это такой своеобразный вариант указателя? Насколько я знаю, нет. И не может быть написано. Это сообщение было перенесено сюда или объединено из темы "D vs C++" |
Сообщ.
#23
,
|
|
|
Цитата Flex Ferrum @ В том, что ссылка может (под капотом) стать указателем только в определённых случаях. Например, при передаче в функцию, принимающую ссылку. Но если ты в одной области видимости объявишь объект и ссылку на него, то ссылка указателем не станет, ибо в этом нет необходимости. Это вопрос оптимизаций. Поведение-то фактически эквивалетно поведению указателя, который автоматически разыменовывается. Это сообщение было перенесено сюда или объединено из темы "D vs C++" |
Сообщ.
#24
,
|
|
|
Цитата OpenGL @ Это вопрос оптимизаций. Это не вопрос оптимизаций, это вопрос семантики. Объявление ссылки не порождает самостоятельную сущность (в отличие от указателя). Это сообщение было перенесено сюда или объединено из темы "D vs C++" |
Сообщ.
#25
,
|
|
|
Я не вижу тут иную семантику, отличную семантики указателя
Это сообщение было перенесено сюда или объединено из темы "D vs C++" |
Сообщ.
#26
,
|
|
|
Цитата Qraizer @ Понятно, о чем ты говоришь. В таких случаях в D используются структуры, которые передаются по значению.Ну это-то понятно. Естественно cool_real_number_having_long_mantissa_with_great_exponent их все имеет. Вопрос в том, как мне complex_number писать. Метакодом я могу напроксить себе какие-нибудь assgn() с нужными if (is(...)) и вместо =, но что-то для меня это как-то костыльно смотрится. Если же твой cool_real_number_having_long_mantissa_with_great_exponent не простой класс, а скажем абстрактный базовый, то тебе всяко придется передавать его по указателю, а значит придется городить тот же метакод из разных оверлоадов. Это сообщение было перенесено сюда или объединено из темы "D vs C++" |
Сообщ.
#27
,
|
|
|
Цитата applegame @ В общем случае не может. Даже больше: может в ограниченном количестве случаев. Всё потому, что указатель доступен программисту как есть, поэтому компилятор не может гарантировать, кто где-то, в невидимом ему контексте, этот указатель программером не поменяется, даже если всё время жизни объекта-указателя у него перед глазами.Компилятор запросто может и разыменованный указатель соптимизировать и не создавать реальной переменной. А может и ссылку создать в виде указателя, если ему приспичит. Если интересно и ещё не в курсе, почитай в гугле на тему "pointer aliasing". Учёт этой штуки по факту заставляет компилятор запрещать многие оптимизации. Которые доступны при замене указателей на ссылки, т.к. единственное место, где ссылка может поменять своё значение – это точка её инициализации. Конечно, невелика разница, если рассматриваемый объект является параметром функции/метода, но достаточно представить себе поле класса, и тут уже не всё так шоколадно с указателями и всё прекрасно с ссылками. Это сообщение было перенесено сюда или объединено из темы "D vs C++" |
Сообщ.
#28
,
|
|
|
Цитата Flex Ferrum @ Неверно, порождает. Ведь можно создать переменную ссылочного типа - это вполне конкретная сущность, то что компилятор решил ее соптимизировать в пустоту - это личное дело его оптимизатора. Настоящий алиас присутствует в D. Вот он реально не создает никаких рантайм сущностей, в отличие от плюсовых ссылок:Это не вопрос оптимизаций, это вопрос семантики. Объявление ссылки не порождает самостоятельную сущность (в отличие от указателя). void foo(alias a)() { a++; } void bar() { int a = 10; foo!(a); assert(a == 11); } Это сообщение было перенесено сюда или объединено из темы "D vs C++" |
Сообщ.
#29
,
|
|
|
Цитата applegame @ Это ещё почему? Т.е. я не могу структуру рассматривать как неPOD, что ли?В таких случаях в D используются структуры, которые передаются по значению. Это сообщение было перенесено сюда или объединено из темы "D vs C++" |
Сообщ.
#30
,
|
|
|
Цитата Qraizer @ Да. Но ведь то же самое относится и к ссылке.В общем случае не может. Даже больше: может в ограниченном количестве случаев. Всё потому, что указатель доступен программисту как есть, поэтому компилятор не может гарантировать, кто где-то, в невидимом ему контексте, этот указатель программером не поменяется, даже если всё время жизни объекта-указателя у него перед глазами. Это сообщение было перенесено сюда или объединено из темы "D vs C++" |