Можно ли считать ссылки типом данных?
От: Максим Рогожин Россия  
Дата: 22.12.18 17:34
Оценка:
Привет!

Можно ли считать ссылки (lvalue reference, rvalue reference) типом данных? Если нет, то тогда чем их считать?
Re: Можно ли считать ссылки типом данных?
От: rg45 СССР  
Дата: 22.12.18 17:41
Оценка: 2 (1)
Здравствуйте, Максим Рогожин, Вы писали:

МР>Привет!


МР>Можно ли считать ссылки (lvalue reference, rvalue reference) типом данных? Если нет, то тогда чем их считать?


Вот, что сказано в стандарте:

6.9 Types
1 [ Note: 6.9 and the subclauses thereof impose requirements on implementations regarding the representation of types. There are two kinds of types: fundamental types and compound types. Types describe objects (4.5), references (11.3.2), or functions (11.3.5). —end note ]

--
Не можешь достичь желаемого — пожелай достигнутого.
Re: Можно ли считать ссылки типом данных?
От: σ  
Дата: 22.12.18 18:16
Оценка:
МР>Можно ли считать ссылки (lvalue reference, rvalue reference) типом данных?

Смотря что называть данными.
Отредактировано 22.12.2018 18:20 σ . Предыдущая версия .
Re[2]: Можно ли считать ссылки типом данных?
От: Максим Рогожин Россия  
Дата: 22.12.18 18:44
Оценка:
Здравствуйте, rg45, Вы писали:

R>

R>6.9 Types
R>1 [ Note: 6.9 and the subclauses thereof impose requirements on implementations regarding the representation of types. There are two kinds of types: fundamental types and compound types. Types describe objects (4.5), references (11.3.2), or functions (11.3.5). —end note ]


Объекты и функции имеют некоторое бинарное представление, занимают некоторую память, то что у них должен быть тип это ясно. Но вот ссылки не имеют бинарного представления, не занимают памяти (могут не занимать), то есть их как бы и нет даже. Тип ссылки это тип чего? Выражения в коде программы?
Re[3]: Можно ли считать ссылки типом данных?
От: rg45 СССР  
Дата: 22.12.18 20:20
Оценка: 4 (1)
Здравствуйте, Максим Рогожин, Вы писали:

R>>

R>>6.9 Types
R>>1 [ Note: 6.9 and the subclauses thereof impose requirements on implementations regarding the representation of types. There are two kinds of types: fundamental types and compound types. Types describe objects (4.5), references (11.3.2), or functions (11.3.5). —end note ]


МР>Объекты и функции имеют некоторое бинарное представление, занимают некоторую память, то что у них должен быть тип это ясно. Но вот ссылки не имеют бинарного представления, не занимают памяти (могут не занимать), то есть их как бы и нет даже. Тип ссылки это тип чего? Выражения в коде программы?


Попробую "на пальцах". Имхо, твое недоумение вызвано тем, что ты пытаешься думать о ссылке как об объекте. А между тем, в выделенном фрагменте ссылки как раз и перечислены отдельно от объектов потому, что ссылки и объекты — разные сущности. Пункт 11.3.2 вводит понятие ссылки (reference) и ссылочного типа (reference type). Таким образом, тип ссылки — это просто тип ссылки — тот самый ссылочный тип. Иными словами, для того, чтобы сущность имела тип, ей не обязательно "иметь бинарное представление" (т.е. быть объектом).

Например, декларатор "int& ir = . . ." объявляет ссылку ir, типом которой является "lvalue reference to int".
--
Не можешь достичь желаемого — пожелай достигнутого.
Re[3]: Можно ли считать ссылки типом данных?
От: Mystic Artifact  
Дата: 22.12.18 20:21
Оценка: +1
Здравствуйте, Максим Рогожин, Вы писали:

Type, Type* и Type& — есть разные типы. Как минимум с точки зрения языковых конструкций. Представление же последних двух в рантайме с оптимизациями может сделать так, что их как бы и нет. При этом, ссылки в оптимизациях выпадают напроч, т.к. ссылка это не более чем обычный указатель посыпанный сверху тонной ереси и баек.
Re[4]: Можно ли считать ссылки типом данных?
От: Максим Рогожин Россия  
Дата: 22.12.18 20:36
Оценка:
Здравствуйте, rg45, Вы писали:

для того, чтобы сущность имела тип, ей не обязательно "иметь бинарное представление" (т.е. быть объектом).

Вот это как раз очень интересно.
Я и говорю тип выражения в коде программы?
А есть другие примеры таких сущностей без бинарного представления в C++ или других языках?
Отредактировано 22.12.2018 20:40 Максим Рогожин . Предыдущая версия . Еще …
Отредактировано 22.12.2018 20:39 Максим Рогожин . Предыдущая версия .
Отредактировано 22.12.2018 20:39 Максим Рогожин . Предыдущая версия .
Отредактировано 22.12.2018 20:38 Максим Рогожин . Предыдущая версия .
Re[4]: Можно ли считать ссылки типом данных?
От: Максим Рогожин Россия  
Дата: 22.12.18 20:44
Оценка:
Здравствуйте, Mystic Artifact, Вы писали:

MA>Как минимум с точки зрения языковых конструкций.

Вот ссылки это как раз чисто языковая конструкция имхо (а не тип данных). Так как если бы они были типом данных, то что есть данные для int&?
Отредактировано 22.12.2018 20:46 Максим Рогожин . Предыдущая версия .
Re[5]: Можно ли считать ссылки типом данных?
От: rg45 СССР  
Дата: 22.12.18 21:01
Оценка: 2 (1)
Здравствуйте, Максим Рогожин, Вы писали:

МР>для того, чтобы сущность имела тип, ей не обязательно "иметь бинарное представление" (т.е. быть объектом).


МР>Вот это как раз очень интересно.

МР>Я и говорю тип выражения в коде программы?

Ну я бы сказал так, но боюсь уже — тут же прибежит σ и начнет меня тыкать носом в каждую неосторожно написанную букву. С "типом выражения" как выяснилось
Автор: rg45
Дата: 29.11.18
, вообще все не так непросто — стандарт повсеместно использует это словосочетание, но нигде не дает прямого определения, что это такое, его можно вывести только через другие понятия. Не так давно было довольно обширное обсуждение, в котором простому смертному вообще трудно понять, где праведное, а где грешное (смотри диалог между σ и N.I. в том же топике).

МР>А есть другие примеры таких сущностей без бинарного представления в C++ или других языках?


Есть — еще одна такая сущность перечислена в том же самом фрагменте, посмотри еще раз:

6.9 Types
1 [ Note: 6.9 and the subclauses thereof impose requirements on implementations regarding the representation of types. There are two kinds of types: fundamental types and compound types. Types describe objects (4.5), references (11.3.2), or functions (11.3.5). —end note ]

--
Не можешь достичь желаемого — пожелай достигнутого.
Re[5]: Можно ли считать ссылки типом данных?
От: Mystic Artifact  
Дата: 22.12.18 21:37
Оценка:
Здравствуйте, Максим Рогожин, Вы писали:

МР>Вот ссылки это как раз чисто языковая конструкция имхо (а не тип данных). Так как если бы они были типом данных, то что есть данные для int&?

Указатель, с помощью которого он ссылается на int. Отсюда можно выкинуть указатель, т.к. это совершенно не принципиально с точки зрения языка, и это скорее деталь реализации, но сли его выкинуть — должно появиться что-то другое.

Все дальнейшие инсинуации, вроде передачи по значению, не обязаны знать о ссылке как типе, достаточно классического указателя. Но это уже совсем иная песня.

Проще всего и указатель и референс представить как некий дженерик тип ptr<T> и ref<T> — так наверное нагляднее.
Re[5]: Можно ли считать ссылки типом данных?
От: Mystic Artifact  
Дата: 22.12.18 22:17
Оценка:
Здравствуйте, Максим Рогожин, Вы писали:

MA>>Как минимум с точки зрения языковых конструкций.

МР>Вот ссылки это как раз чисто языковая конструкция имхо (а не тип данных). Так как если бы они были типом данных, то что есть данные для int&?
Перечитал вопрос еще раз и решил еще раз на него ответить.

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

Тем не менее, как бы ни хотелось — в физические функции нам надо, что-то подавать. На практике, в худшем случае, мы знаем, что это указатель.

Просто особенность типа именно в его неприменимости к полям — но, извините, любой параметр функции имеет тип. Поэтому, это отдельно стоящий тип, который воплощается в реальности во что-то (понятно, во что, если еще раз повторюсь, меня прибьют.)
Отредактировано 22.12.2018 22:18 Mystic Artifact . Предыдущая версия .
Re[6]: Можно ли считать ссылки типом данных?
От: σ  
Дата: 22.12.18 22:58
Оценка: +2
MA> Мне видится глупым, что в языке вообще существует такой тип данных вообще — он может быть передан в функцию, но не может быть полем.
Что такое поле и какой тип им быть не может?
Re[6]: Можно ли считать ссылки типом данных?
От: Максим Рогожин Россия  
Дата: 23.12.18 13:48
Оценка:
Здравствуйте, rg45, Вы писали:

R>Есть — еще одна такая сущность перечислена в том же самом фрагменте, посмотри еще раз:


R>

R>6.9 Types
R>1 [ Note: 6.9 and the subclauses thereof impose requirements on implementations regarding the representation of types. There are two kinds of types: fundamental types and compound types. Types describe objects (4.5), references (11.3.2), or functions (11.3.5). —end note ]


Функции? Но функции имеют бинарное представление.
Re[7]: Можно ли считать ссылки типом данных?
От: wander  
Дата: 23.12.18 13:54
Оценка: 2 (1)
Здравствуйте, Максим Рогожин, Вы писали:

МР>Функции? Но функции имеют бинарное представление.


Да, но функции не объекты.

Еще пример: имеет тип, но не имеет бинарного представления — тип void.
Re[7]: Можно ли считать ссылки типом данных?
От: rg45 СССР  
Дата: 23.12.18 13:56
Оценка:
Здравствуйте, Максим Рогожин, Вы писали:

МР>Функции? Но функции имеют бинарное представление.


Мне аж интересно, откуда ты черпаешь информацию. Что это за источник, где сказано, что функции "имеют бинарное представление", а ссылки нет? И что там с life time и storage duration функций, не подскажешь?

А заодно, может, объяснишь, как так получается, что добавление фунциии в класс не влияет на его размер, а добавление ссылки влиеяет: https://ideone.com/6twmUT. По твоим-то сведениям все должно быть наоборот?
--
Не можешь достичь желаемого — пожелай достигнутого.
Отредактировано 23.12.2018 14:16 rg45 . Предыдущая версия .
Re: Можно ли считать ссылки типом данных?
От: reversecode google
Дата: 23.12.18 14:19
Оценка:
МР>Можно ли считать ссылки (lvalue reference, rvalue reference) типом данных? Если нет, то тогда чем их считать?

для чего это может понадобится ?
Re[2]: Можно ли считать ссылки типом данных?
От: Максим Рогожин Россия  
Дата: 23.12.18 14:55
Оценка:
Здравствуйте, reversecode, Вы писали:



МР>>Можно ли считать ссылки (lvalue reference, rvalue reference) типом данных? Если нет, то тогда чем их считать?


R>для чего это может понадобится ?


Ты еще спроси зачем σ все его знания стандарта))
Re[8]: Можно ли считать ссылки типом данных?
От: Максим Рогожин Россия  
Дата: 23.12.18 15:02
Оценка:
Здравствуйте, rg45, Вы писали:

R>Здравствуйте, Максим Рогожин, Вы писали:


МР>>Функции? Но функции имеют бинарное представление.


R>Мне аж интересно, откуда ты черпаешь информацию. Что это за источник, где сказано, что функции "имеют бинарное представление", а ссылки нет? И что там с life time и storage duration функций, не подскажешь?

Согласен, функции не всегда имеют бинарное представление — inline функции, например)

R>А заодно, может, объяснишь, как так получается, что добавление фунциии в класс не влияет на его размер, а добавление ссылки влиеяет: https://ideone.com/6twmUT. По твоим-то сведениям все должно быть наоборот?

Ну с функциями класса то все ясно — это информация времени компиляции, в рантайме нет никаких функций классов, только данные остаются.
А добавление ссылки — видимо это требование стандарта, что ссылка в классе должна быть фактической т.е. всегда занимать место в представлении класса
Re[3]: Можно ли считать ссылки типом данных?
От: reversecode google
Дата: 23.12.18 15:06
Оценка:
МР>Ты еще спроси зачем σ все его знания стандарта))

зачем ему это надо или не надо я смогу понять
я не понимаю зачем это вам
Re[4]: Можно ли считать ссылки типом данных?
От: Максим Рогожин Россия  
Дата: 23.12.18 15:10
Оценка:
Здравствуйте, reversecode, Вы писали:


МР>>Ты еще спроси зачем σ все его знания стандарта))


R>зачем ему это надо или не надо я смогу понять

R>я не понимаю зачем это вам
А зачем вам это понимать??
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.