Вопрос по категории указателей, ссылок и массивов
От: velkin Удмуртия http://blogs.rsdn.org/effective/
Дата: 13.10.21 11:20
Оценка:
Вопрос такой, если соотнести типы по категориям:

1) Встроенные типы: логический (bool), символьный (char), целый (int), вещественный (double), пустой (void)
2) Пользовательские типы: перечисляемый (enum), объединяющий (union), структурный (struct), объектный (class)
3) ??? типы: указательный (*), ссылочный (&), массивный ([])

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

Или вот я обозвал структуру данных struct структурным типом, а class объектным, даже если на нём и можно создать чисто абстрактный интерфейс. Ещё вопрос в том, понимают ли другие люди фундаментальные понятия по другому. То есть class это не объектный тип, а нечто другое, или struct не структурный тип и всё в таком роде. Или может быть есть более изящное название массивного типа, то есть чтобы там вначале тоже было прилагательное. В общем отпишитесь кто что думает.
Re: Вопрос по категории указателей, ссылок и массивов
От: galileo Земля  
Дата: 13.10.21 14:37
Оценка: 4 (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 арифметические и всё такое. Но мне интересны именно большие категории.


в C# есть референсные типы, но в С++ они могут вызвать недопонимание
https://docs.microsoft.com/en-us/dotnet/csharp/language-reference/keywords/reference-types

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


не стоит усложнять вводя новые термины
class это класс, struct это структура
а массив лучше называть арреем
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
Re: Вопрос по категории указателей, ссылок и массивов
От: AlexGin Беларусь  
Дата: 18.11.21 20:05
Оценка: 3 (2) +1
Здравствуйте, velkin, Вы писали:

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


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

Это POD (plain old data) типы данных:
https://en.cppreference.com/w/cpp/named_req/PODType

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

Как-то всё в одну кучу ты сложил.
Исторически так уж повелось, что class объединяет данные и методы работы с ними. Это выделяет его из данного ряда.

V>3) ??? типы: указательный (*), ссылочный (&), массивный ([])

Первые два — типы косвенного обращения к данным.
Третий — простейшая коллекция. Её реализация при помощи указателя в СИ — издержки технологий 1970-х.

V>Тогда как обозвать третью категорию. Вроде бы понятно, что там работа идёт с адресацией в памяти.

Это некоторое допущение. В своё время (когда аллокация в памяти была вручную), оно было актуально.
По возможности следует абстрагироваться от понятия "управление_памятью".
Теперь в C++ есть smart-pointers, позволяющие нам абстрагироваться.

V>Могу их обозвать адресными типами, но по сути это откровенная отсебятина. Впрочем она здесь не первая, и если кто-то классифицирует типы из этих категорий по другому отпишитесь как именно.

Когда занимаешся практикой разработки, меньше всего заморачиваешся на этой теории, но если уже говорить об этом —
то здесь три разные сущности:
— указатель (как адрес в памяти)
— ссылка (как алиас объекта) не даром в C++ она не может быть нулевой
— массив — как разновидность коллекции объектов.

V>Или вот я обозвал структуру данных struct структурным типом, а class объектным, даже если на нём и можно создать чисто абстрактный интерфейс.

А тут уже некоторое недопонимание терминологии: т.к. в C++ доступно множественное наследоваине реализаций (что не есть хорошо), то
абстрактный базовый класс применяют как костыль как интерфейс.

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

Так ведь "массивного" типа по существу и не надо. Надо — нормальные коллекции.
Важно, что эти коллекции поддерживают Generics (обобщённые типы данных: C++ templates).

P.S. Вот интересная (имхо) статья:
https://mariusbancila.ro/blog/2020/08/10/no-more-plain-old-data
Отредактировано 18.11.2021 20:12 AlexGin . Предыдущая версия .
Re: Вопрос по категории указателей, ссылок и массивов
От: Максим Россия  
Дата: 20.11.21 14:24
Оценка:
V>3) ??? типы: указательный (*), ссылочный (&), массивный ([])

Кстати насчет массивов. Недавно узнал, что в C/C++ можно переставлять местами имя массива и индекс (поскольку это все равно в *(адрес+смещение)= разворачивается). Забавно выглядит.

#include <iostream>

int main()
{
    int p[] = {0, 7, 5};
    
    2[p] = 12;
    
    std::cout << "p[2]=" << p[2];
}
Errare humanum est
Отредактировано 20.11.2021 14:26 Максим . Предыдущая версия . Еще …
Отредактировано 20.11.2021 14:25 Максим . Предыдущая версия .
Отредактировано 20.11.2021 14:24 Максим . Предыдущая версия .
Re[2]: Вопрос по категории указателей, ссылок и массивов
От: Marty Пират https://www.youtube.com/channel/UChp5PpQ6T4-93HbNF-8vSYg
Дата: 20.11.21 16:04
Оценка: :)
Здравствуйте, Максим, Вы писали:

V>>3) ??? типы: указательный (*), ссылочный (&), массивный ([])


М>Кстати насчет массивов. Недавно узнал, что в C/C++ можно переставлять местами имя массива и индекс (поскольку это все равно в *(адрес+смещение)= разворачивается). Забавно выглядит.


Так веселее:

#include <stdio.h>
  int main()
  {
    int a=3, b = 5;

    printf(&a["Ya!Hello! how is this? %s\n"], &b["junk/super"]);
    printf(&a["WHAT%c%c%c  %c%c  %c !\n"], 1["this"],
       2["beauty"],0["tool"],0["is"],3["sensitive"],4["CCCCCC"]);
    return 0;
  }
Маньяк Робокряк колесит по городу
Re[2]: Вопрос по категории указателей, ссылок и массивов
От: LaptevVV Россия  
Дата: 20.11.21 17:23
Оценка:
AG>P.S. Вот интересная (имхо) статья:
AG>https://mariusbancila.ro/blog/2020/08/10/no-more-plain-old-data
Кстати, как там по-русски сформулировать standard-layout ?
Хочешь быть счастливым — будь им!
Без булдырабыз!!!
Re[3]: Вопрос по категории указателей, ссылок и массивов
От: AlexGin Беларусь  
Дата: 23.11.21 10:40
Оценка:
Здравствуйте, LaptevVV, Вы писали:

AG>https://mariusbancila.ro/blog/2020/08/10/no-more-plain-old-data


LVV>Кстати, как там по-русски сформулировать standard-layout ?


Как-бы понятие "стандартиная планировка" здесь немного не по теме.

Честно говоря, мне (да и многим моим коллегам) было бы удобнее называть это по английский.
Хотя бы чтобы избежать путаницы в терминологии, которая на наших просторах часто сопровождает свежие англоязычные компьютерные неологизмы.
Re[2]: Вопрос по категории указателей, ссылок и массивов
От: AlexGin Беларусь  
Дата: 23.11.21 11:08
Оценка:
Здравствуйте, Максим, Вы писали:

V>>3) ??? типы: указательный (*), ссылочный (&), массивный ([])


М>Кстати насчет массивов. Недавно узнал, что в C/C++ можно переставлять местами имя массива и индекс...


ИМХО это всегда так и было — ещё в самых ранних реализациях СИ.
Re[4]: Вопрос по категории указателей, ссылок и массивов
От: LaptevVV Россия  
Дата: 23.11.21 11:29
Оценка: 6 (1) +1
LVV>>Кстати, как там по-русски сформулировать standard-layout ?
AG>Как-бы понятие "стандартиная планировка" здесь немного не по теме.
Стандартную планировку на форме — это понятно.
А здесь какая планировка имеется ввиду?
AG>Честно говоря, мне (да и многим моим коллегам) было бы удобнее называть это по английский.
AG>Хотя бы чтобы избежать путаницы в терминологии, которая на наших просторах часто сопровождает свежие англоязычные компьютерные неологизмы.
Семантика данного термина по-русски — стандартное размещение в памяти?
Хочешь быть счастливым — будь им!
Без булдырабыз!!!
Re[5]: Вопрос по категории указателей, ссылок и массивов
От: AlexGin Беларусь  
Дата: 23.11.21 13:18
Оценка:
Здравствуйте, LaptevVV, Вы писали:

LVV>Семантика данного термина по-русски — стандартное размещение в памяти?

+100500
Да, похоже именно так!
Re[4]: Вопрос по категории указателей, ссылок и массивов
От: удусекшл  
Дата: 23.11.21 13:51
Оценка:
Здравствуйте, AlexGin, Вы писали:

AG>>https://mariusbancila.ro/blog/2020/08/10/no-more-plain-old-data


LVV>>Кстати, как там по-русски сформулировать standard-layout ?


AG>Как-бы понятие "стандартиная планировка" здесь немного не по теме.


Стандартная раскладка?
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.