Информация об изменениях

Сообщение Re[4]: Не могу понять ссылки в C++ от 16.06.2024 17:40

Изменено 16.06.2024 17:53 rg45

Re[4]: Не могу понять ссылки в C++
Здравствуйте, r0nd, Вы писали:

R>Если под объектом понимается "нечто в памяти", то утверждение неверно:


Так, чтоб расставить точки над "i". Сылки в C++ — это отдельные от объектов типы данных, так же как и функции:

https://timsong-cpp.github.io/cppwp/n4861/basic.types#1

[ Note: [basic.types] 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, references, or functions. — end note]


Неотъемлемым свойсвом всех типов объектов является возможность образования производных типов — указателей на объеты и ссылок на объекты. Но нет в языке С++ таких типов данных как указатели на ссылки и ссылки на ссылки. Потому ссылки — не объекты.

Нестатическая член-ссылка даже не является подобъектом родительского объекта:

https://timsong-cpp.github.io/cppwp/n4861/class.mem#4

[Note 2 : A non-static data member of non-reference type is a member subobject of a class object (6.7.2). —end note]


А под "нечто в памяти" подпадает много чего — функции, виртуальные таблицы и указатели на них, паддинг между членами классов. Не нужно думать, что все, что вам удалось разглядеть в дампе — это все объекты.
Re[4]: Не могу понять ссылки в C++
Здравствуйте, r0nd, Вы писали:

R>Если под объектом понимается "нечто в памяти", то утверждение неверно:


Так, чтоб расставить точки над "i". Сылки в C++ — это отдельные от объектов типы данных, так же как и функции:

https://timsong-cpp.github.io/cppwp/n4861/basic.types#1

[ Note: [basic.types] 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, references, or functions. — end note]


Неотъемлемым свойсвом всех типов объектов является возможность образования производных типов — указателей на объеты и ссылок на объекты. Но нет в языке С++ таких типов данных как указатели на ссылки и ссылки на ссылки. Потому что ссылки — не объекты.

Нестатическая член-ссылка даже не является подобъектом родительского объекта:

https://timsong-cpp.github.io/cppwp/n4861/class.mem#4

[Note 2 : A non-static data member of non-reference type is a member subobject of a class object (6.7.2). —end note]


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