Re: Вопрос по категории указателей, ссылок и массивов
От: _NN_ www.nemerleweb.com
Дата: 14.10.21 05:46
Оценка: 8 (1)
Здравствуйте, velkin, Вы писали:

V>Вопрос такой, если соотнести типы по категориям:


V>1) Встроенные типы: логический (bool), символьный (char), целый (int), вещественный (double), пустой (void)

V>2) Пользовательские типы: перечисляемый (enum), объединяющий (union), структурный (struct), объектный (class)
V>3) ??? типы: указательный (*), ссылочный (&), массивный ([])

V>Тогда как обозвать третью категорию. Вроде бы понятно, что там работа идёт с адресацией в памяти. Могу их обозвать адресными типами, но по сути это откровенная отсебятина. Впрочем она здесь не первая, и если кто-то классифицирует типы из этих категорий по другому отпишитесь как именно. Понятно, что bool+char+int целочисленные, тогда как bool+char+int+double арифметические и всё такое. Но мне интересны именно большие категории.


В стандарте есть составные типы, это группы 2 и 3 вместе.
std::is_compound, std::is_fundamental

Что именно объединяет указатель, ссылку и массив ?
Указатель и массив ещё понятно, в С практически взаимозаменяемы.
А вот ссылка это просто другое имя для переменной и не более того.
Операций как разыменовывания или обращение по индексу для ссылки не предусмотрены если это конечно не ссылка на указатель или массив.

6.7.2 Compound types [basic.compound]

Compound types can be constructed in the following ways:
(1.1) — arrays of objects of a given type;
(1.2) — functions, which have parameters of given types and return void or references or objects of a given type;
(1.3) — pointers to cv void or objects or functions (including static members of classes) of a given type;
(1.4) — references to objects or functions of a given type. There are two types of references:
(1.4.1) — lvalue reference
(1.4.2) — rvalue reference
(1.5) — classes containing a sequence of objects of various types, a set of types, enumerations and functions for manipulating these objects, and a set of restrictions on the access to these entities;
(1.6) — unions, which are classes capable of containing objects of different types at different times;
(1.7) — enumerations, which comprise a set of named constant values. Each distinct enumeration constitutes a different enumerated type;
(1.8) — pointers to non-static class members, which identify members of a given type within objects of a given class. Pointers to data members and pointers to member functions are collectively called pointer-to-member types.

In the same draft composite types refer to composition of primary types in the form of templates.

23.15.4.2 Composite type traits [meta.unary.comp]

These templates provide convenient compositions of the primary type categories, corresponding to the descriptions given in subclause 6.7.


V>Или вот я обозвал структуру данных struct структурным типом, а class объектным, даже если на нём и можно создать чисто абстрактный интерфейс. Ещё вопрос в том, понимают ли другие люди фундаментальные понятия по другому. То есть class это не объектный тип, а нечто другое, или struct не структурный тип и всё в таком роде. Или может быть есть более изящное название массивного типа, то есть чтобы там вначале тоже было прилагательное. В общем отпишитесь кто что думает.
http://rsdn.nemerleweb.com
http://nemerleweb.com
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.