Тогда как обозвать третью категорию. Вроде бы понятно, что там работа идёт с адресацией в памяти. Могу их обозвать адресными типами, но по сути это откровенная отсебятина. Впрочем она здесь не первая, и если кто-то классифицирует типы из этих категорий по другому отпишитесь как именно. Понятно, что bool+char+int целочисленные, тогда как bool+char+int+double арифметические и всё такое. Но мне интересны именно большие категории.
Или вот я обозвал структуру данных struct структурным типом, а class объектным, даже если на нём и можно создать чисто абстрактный интерфейс. Ещё вопрос в том, понимают ли другие люди фундаментальные понятия по другому. То есть class это не объектный тип, а нечто другое, или struct не структурный тип и всё в таком роде. Или может быть есть более изящное название массивного типа, то есть чтобы там вначале тоже было прилагательное. В общем отпишитесь кто что думает.
Re: Вопрос по категории указателей, ссылок и массивов
Здравствуйте, 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: Вопрос по категории указателей, ссылок и массивов
Здравствуйте, 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 арифметические и всё такое. Но мне интересны именно большие категории.
Что именно объединяет указатель, ссылку и массив ?
Указатель и массив ещё понятно, в С практически взаимозаменяемы.
А вот ссылка это просто другое имя для переменной и не более того.
Операций как разыменовывания или обращение по индексу для ссылки не предусмотрены если это конечно не ссылка на указатель или массив.
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 не структурный тип и всё в таком роде. Или может быть есть более изящное название массивного типа, то есть чтобы там вначале тоже было прилагательное. В общем отпишитесь кто что думает.
Здравствуйте, 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).
Кстати насчет массивов. Недавно узнал, что в C/C++ можно переставлять местами имя массива и индекс (поскольку это все равно в *(адрес+смещение)= разворачивается). Забавно выглядит.
#include <iostream>
int main()
{
int p[] = {0, 7, 5};
2[p] = 12;
std::cout << "p[2]=" << p[2];
}
Здравствуйте, Максим, Вы писали:
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]: Вопрос по категории указателей, ссылок и массивов
Здравствуйте, Максим, Вы писали:
V>>3) ??? типы: указательный (*), ссылочный (&), массивный ([])
М>Кстати насчет массивов. Недавно узнал, что в C/C++ можно переставлять местами имя массива и индекс...
ИМХО это всегда так и было — ещё в самых ранних реализациях СИ.
Re[4]: Вопрос по категории указателей, ссылок и массивов
LVV>>Кстати, как там по-русски сформулировать standard-layout ? AG>Как-бы понятие "стандартиная планировка" здесь немного не по теме.
Стандартную планировку на форме — это понятно.
А здесь какая планировка имеется ввиду? AG>Честно говоря, мне (да и многим моим коллегам) было бы удобнее называть это по английский. AG>Хотя бы чтобы избежать путаницы в терминологии, которая на наших просторах часто сопровождает свежие англоязычные компьютерные неологизмы.
Семантика данного термина по-русски — стандартное размещение в памяти?
Хочешь быть счастливым — будь им!
Без булдырабыз!!!
Re[5]: Вопрос по категории указателей, ссылок и массивов