Форум программистов, компьютерный форум, киберфорум
С++ для начинающих
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск  
 
 
Рейтинг 4.94/48: Рейтинг темы: голосов - 48, средняя оценка - 4.94
1 / 1 / 1
Регистрация: 20.08.2015
Сообщений: 35

Почему для пустого класса или структуры выделяется 1 байт?

03.03.2016, 15:05. Показов 11303. Ответов 62
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
С коллегой знаем, что для пустого класса или структуры выделяется 1 байт. Но нигде не можем найти почему именно один байт. Но такая информация с объяснением где то была. Никто не может подсказать почему имено один 1 байт? Было бы хорошо ссылку на источник.
0
IT_Exp
Эксперт
34794 / 4073 / 2104
Регистрация: 17.06.2006
Сообщений: 32,602
Блог
03.03.2016, 15:05
Ответы с готовыми решениями:

Если для структуры используется оператор new, то память выделяется в куче или на стеке?
Если для структуры используется оператор new, например, так: struct SomeStruct { }

Почему часть или буква выделяется красным цветом?
почему когда вводиш функцыю или совершаеш другое действие то часть или буква выделяется красным цветом

Почему на указатель в 64-разрядной системе выделяется 8 байт памяти, а в 32-разрядной системе - 4 байта?
Здравствуйте! Почему на указатель в 64-разрядной системе выделяется 8 байт памяти, а в 32-разрядной системе - 4 байта? С чем связано...

62
Вездепух
Эксперт CЭксперт С++
 Аватар для TheCalligrapher
13239 / 6871 / 1827
Регистрация: 18.10.2014
Сообщений: 17,417
05.03.2016, 02:11
Студворк — интернет-сервис помощи студентам
Цитата Сообщение от IGPIGP Посмотреть сообщение
Но в рамках 11 стандарта, это возможность локального определения функции. Почти.
Не совсем понимаю.

Классы (в том числе локальные) существуют в языке С++ с начала времен - со стандарта С++98. Перегрузка оператора '()' тоже существует в языке С++ с начала времен. То есть вот с тех пор в языке С++ существуют и активно используются так называемые функторы и/или функциональные объекты (то есть то, что вы назвали "почти функциями"), в том числе иногда и локальные.

Единственная связь с С++11, которую я тут вижу, это то, что до С++11 запрещалось использовать локальные классы в качестве типовых параметров шаблонов. Т.е. формально действительно ваш код требует С++11 для компиляции. Однако тот же С++11 фактически и убил необходимость явного определения локальных классов, предоставив лямбды - фичу, которая делает то же самое через существенно более элегантный и компактный синтаксис.

P.S. Внимательный читатель сразу спросит меня: а как я собираюсь делать 'predecate.dirrection=false;' через лямбды? На что я ему грустно отвечу: никак. Я лучше заведу две отдельные лямбды для сортировки в разных направлениях. Но, разумеется, никто не запрещает сделать "направление" внешней переменной, захватываемой по ссылке.

Цитата Сообщение от IGPIGP Посмотреть сообщение
определение типа тегом, это штука которую мало кто помнит
Я по прежнему силюсь понять, о чем именно идет речь. Теги были в языке С. В С++ уже нет понятия "тега". Если под "тегом" вы имеете в виду (по аналогии с С) имя класса в 'class Name', то почему тогда "мало кто помнит". Имена классов-то в С++ используют все подряд направо и налево.

Приведите пример тега в С++ и того самого использования, о котором "мало кто помнит".
0
Комп_Оратор)
Эксперт по математике/физике
 Аватар для IGPIGP
9007 / 4708 / 630
Регистрация: 04.12.2011
Сообщений: 14,003
Записей в блоге: 16
05.03.2016, 02:30
Цитата Сообщение от TheCalligrapher Посмотреть сообщение
по прежнему силюсь понять, о чем именно идет речь. Тэги были в языке С. В С++ уже нет понятия "тега".
Н-нет. Просто у меня это всё свалилось в кучу.
Так как показано в примере, это не тег, поскольку явно указано имя типа T. То есть, как Вы правильно говорите это локальное определение класса, совмещенное с объявлением объекта. Но есть и более древняя конструкция, когда имя типа не указывается. Тогда в конструкции
C++
1
struct{....} obj;
всё что перед именем obj это тег типа (читай: имя типа). Тут нет нужды в имени. Пространство имён не страдает..
А объявление вида:
C++
1
struct StructName{....} obj;
появились позже. При этом, как я понимаю, struct StructName интерпретируется как тег (читай: описатель типа) при передаче операторной функции sizeof например. Создаётся иллюзия что передан класс... Может я действительно непонятно говорю.
Бог с ним.
0
Evg
Эксперт CАвтор FAQ
 Аватар для Evg
21287 / 8312 / 637
Регистрация: 30.03.2009
Сообщений: 22,671
Записей в блоге: 30
05.03.2016, 11:28
Цитата Сообщение от IGPIGP Посмотреть сообщение
но это конечно не значит, что sizeof возвращает размер класса
После того, как TheCalligrapher нормальным языком объяснил свойства пустой структуры (класса), теперь я с этим соглашусь
0
Эксперт С++
 Аватар для hoggy
8973 / 4319 / 960
Регистрация: 15.11.2014
Сообщений: 9,760
05.03.2016, 13:07
Цитата Сообщение от Evg Посмотреть сообщение
После того, как TheCalligrapher нормальным языком объяснил свойства пустой структуры (класса), теперь я с этим соглашусь
что изменилось в вашей картине мира?
объект по прежнему весит минимум 1 байт.
0
Комп_Оратор)
Эксперт по математике/физике
 Аватар для IGPIGP
9007 / 4708 / 630
Регистрация: 04.12.2011
Сообщений: 14,003
Записей в блоге: 16
05.03.2016, 13:18
Цитата Сообщение от Evg Посмотреть сообщение
теперь я с этим соглашусь
Теперь я вижу, что ранее Вы с этим не соглашались. Мне показалось, Вы размышляли о том, почему так сделано. В том смысле например, что адреса пустых объектов можно инициализировать nullptr, а в алгоритмы внести ветви отдельно обрабатывающие данную ситуацию. Или как-то ещё.
В любом разе я рад, что всё разрешилось к согласию.
0
Игогошка!
 Аватар для ct0r
1801 / 708 / 44
Регистрация: 19.08.2012
Сообщений: 1,367
05.03.2016, 15:57
Цитата Сообщение от Evg Посмотреть сообщение
Что за обобщённый код, которому нужно различать две сущности, не содержащие в себе данные?
Код на то и обобщенный, что ему должно быть все равно - объекты пустого типа на входе или нет. Вот нужно написать алгоритм (или структуру данных), который оставляет в контейнере указатели на разные элементы. Какого типа элементы - да фиг его знает - может быть пустые, может и нет - как захочет клиентский код. Как пишем?

Цитата Сообщение от Evg Посмотреть сообщение
Для GNU C я ещё хоть как-то интуитивно понимаю, почему так сделали и зачем вообще поддержали пустые структуры.
Ну так зачем?

Цитата Сообщение от Evg Посмотреть сообщение
Пустой класс как самостоятельный тип для объекта и как базовый тип для наследования ведут себя по разному.
Это очевидно, мы же отличаем most derived object от base class subobject. Разговор шел о первом (по крайней мере так думал я), раз изначально утверждается размер больший нуля.

Добавлено через 38 секунд
PS
Кто-нибудь может разъяснить с точки зрения стандарта применение sizeof к абстрактному классу?
0
Вездепух
Эксперт CЭксперт С++
 Аватар для TheCalligrapher
13239 / 6871 / 1827
Регистрация: 18.10.2014
Сообщений: 17,417
05.03.2016, 22:36
Цитата Сообщение от ct0r Посмотреть сообщение
Кто-нибудь может разъяснить с точки зрения стандарта применение sizeof к абстрактному классу?
Прямого ответа на вопрос о том, почему стандарт не запрещает применение sizeof к абстрактному классу, я не встречал.

Однако на отдаленно родственный вопрос - почему в С++11 разрешается объявлять абстрактные классы как final - отвечают так: абстрактные классы могут использоваться просто в качестве оберток для своих статических членов. Такие классы не предназначены ни для инстанциирования, ни для наследования, а служат в роли namespace для набора статических элементов.

Можно предположить, что отсутствие запрета на применение sizeof к абстрактным классам объясняется нежеланием создавать пользователю лишние препоны в ситуациях, когда такой абстрактный класс-обертка может передаваться куда-нибудь в generic шаблонный код. Вполне может быть, что внутри такого generic кода окажется какое-то невинное применение sizeof к переданному типу. Чтобы не заставлять автора кода изворачиваться и блокировать такое применение sizeof к абстрактным классам, оно оставлено разрешенным.

В С++ много таких мест, направленных на облегчение написания шаблонного кода. Та же (запрещенная в С) возможность возвращать void значения из void функций, вызовы псевдодеструкторов и т.п.
2
Evg
Эксперт CАвтор FAQ
 Аватар для Evg
21287 / 8312 / 637
Регистрация: 30.03.2009
Сообщений: 22,671
Записей в блоге: 30
06.03.2016, 00:05
Цитата Сообщение от IGPIGP Посмотреть сообщение
В любом разе я рад, что всё разрешилось к согласию
Про sizoef от типа вопрос немного стоит в стороне и был не особенно интересен (выше уже заметили, он скорее философский, чем технический). Но в контексте того, что пустая структура ведёт себя по разному в разных случаях, действительно становится корректным формальное значение sizoef как "размер, который бы имел объект данного типа".

Реально у меня был вопрос на предмет того, зачем нужно различать два объекта пустого класса. Собственно, я до сих пор этого толком не понимаю

Цитата Сообщение от ct0r Посмотреть сообщение
Ну так зачем?
Язык GNU C развивался не абстрактно в воздухе, а в контексте ядра linux и glibc, очень много расширений в язык вводилось именно из-за них. На низком уровне (а Си очень хорош для низкого уровня) если объект (метка) не имеет данных, ему незачем хранить память, две метки с одинаковым адресом на низком уровне - нормальное явление, особенно когда на Си расписывается что-то типа образа памяти (коим является ядро операционной системы).

На высоком уровне типа Си++ может это и плохо, но я не понимаю, почему. Т.е. зачем нужно различать две сущности, не имеющие данных (в том смысле, что зачем их вообще создавать, чтобы потом различать). Формально придумать задачу, где это нужно, не сложно. Но зачем и ради чего нужны такие извращения - мне не понятно
0
Комп_Оратор)
Эксперт по математике/физике
 Аватар для IGPIGP
9007 / 4708 / 630
Регистрация: 04.12.2011
Сообщений: 14,003
Записей в блоге: 16
06.03.2016, 01:31
Цитата Сообщение от Evg Посмотреть сообщение
Реально у меня был вопрос на предмет того, зачем нужно различать два объекта пустого класса.
Я думаю, что поскольку класс это мужское начало, то в отличие от структуры (С-структуры так как в плюсах это один леший, только с разным доступом по умолчанию)) каждый его экземпляр имеет this. Куда-то по мнению Создателя этот this должен указывать, видимо.
То есть объект определён как часть памяти и на него можно взять адрес. Глядя на финал обсуждения, об этом существуют различные предположения. Вон у абстрактного класса с всего одним да и то виртуальным методом размер сразу аж 4! Не ровён час как указатель на vtable там живёт. Абстрактный класс интересный зверь. Он не имеет объектов но имеет конструкторы. По крайней мере один.
Evg, если серьёзно, то и мне интересно почему всё так.
0
Игогошка!
 Аватар для ct0r
1801 / 708 / 44
Регистрация: 19.08.2012
Сообщений: 1,367
06.03.2016, 04:35
Цитата Сообщение от TheCalligrapher Посмотреть сообщение
Прямого ответа на вопрос о том, почему стандарт не запрещает применение sizeof к абстрактному классу, я не встречал.
Все нормально, я просто затупил - забыл про выделенное.
no objects of an abstract class can be created except as subobjects of a class derived from it.
...
When applied to a class, the result is the number of bytes in an object of that class including any padding required for placing objects of that type in an array.
То есть sizeof абстрактного класса - это объем памяти, который будет занимать объект этого класса в объекте класса, производного от него.
Хотя сходу я не могу придумать этому применение - как по мне, так это еще один возможный источник глупых ошибок смешивания рантайм и компайл-тайма.

Цитата Сообщение от Evg Посмотреть сообщение
две метки с одинаковым адресом на низком уровне - нормальное явление, особенно когда на Си расписывается что-то типа образа памяти
Не видел такого. Видел, что поддержку пустых структур используют, когда число полей структуры меняется в зависимости от директив условной компиляции, - чтобы сохранить единообразность.
0
techpriest
 Аватар для Mirmik
634 / 213 / 57
Регистрация: 27.02.2014
Сообщений: 1,180
06.03.2016, 04:58
Evg

На ум приходит поведение объектов класса-заглушки с еще не добавленными данными в случае использования его как элементов массива или вектора. Или этот класс может быть результатом работы какого-то шаблона (не такая уж и гипотетическая ситуация).

То есть, если мы делаем foreach для такого массива, то некий метод его объектов должен выполниться нужное количество раз. Стандартное определение количество итераций основано на адресной арифметике и будет некорректным при нулевом размере объекта.

Я, честно говоря, думаю, создатели просто увидели место, где поведение кода может нарушаться и в некотором роде костыльно его обошли, не особо над этим задумываясь...
1
Вездепух
Эксперт CЭксперт С++
 Аватар для TheCalligrapher
13239 / 6871 / 1827
Регистрация: 18.10.2014
Сообщений: 17,417
06.03.2016, 05:42
Цитата Сообщение от ct0r Посмотреть сообщение
То есть sizeof абстрактного класса - это объем памяти, который будет занимать объект этого класса в объекте класса, производного от него.
Вот это как раз таки не совсем так. Как уже говорилось выше, пустой класс с sizeof 1 может занимать 0 байт в классе-наследнике. Но это еще не все.

Если непустой класс имеет в своем составе padding байты в конце (которые, как известно, входят в его sizeof), то в составе класса-наследника территория этих padding байтов может использоваться для хранения полей других подобъектов класса-наследника, если они туда помещаются и если их устраивает выравнивание.

Например

http://coliru.stacked-crooked.... 97e83d4025

C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
#include <iostream>
 
class A {
    long l;
    char c;
};
 
class B : A {
    char d, e, f, g, h, i, j;
};
 
int main() {
    std::cout << sizeof(A) << " " << sizeof(B) << std::endl;
}
16 16
То есть этом случае базовый подобъект A в составе B занял всего 9 байт.
2
Игогошка!
 Аватар для ct0r
1801 / 708 / 44
Регистрация: 19.08.2012
Сообщений: 1,367
06.03.2016, 06:14
Цитата Сообщение от TheCalligrapher Посмотреть сообщение
Как уже говорилось выше, пустой класс с sizeof 1 может занимать 0 байт в классе-наследнике.
Да, в теории - любой базовый подобъект можно занулить. Но на практике - можно ли занулить vptr?

Цитата Сообщение от TheCalligrapher Посмотреть сообщение
в составе класса-наследника территория этих padding байтов может использоваться для хранения полей других подобъектов класса-наследника, если они туда помещаются и если их устраивает выравнивание
Да, сноски тоже надо читать
The actual size of a base class subobject may be less than the result of applying sizeof to the subobject, due to virtual
base classes and less strict padding requirements on base class subobjects.
0
Комп_Оратор)
Эксперт по математике/физике
 Аватар для IGPIGP
9007 / 4708 / 630
Регистрация: 04.12.2011
Сообщений: 14,003
Записей в блоге: 16
06.03.2016, 11:06
Цитата Сообщение от Mirmik Посмотреть сообщение
создатели просто увидели место, где поведение кода может нарушаться и в некотором роде костыльно его обошли
Создатель у С++ один.
Среди различных предположений позволю себе ещё одно. Если неприятности с проверкой на ноль (nullptr) указателя в самом конструкторе это не аргумент, то можно представить как работала бы операторная функция new с объектом нулевого размера. Ей тоже пришлось бы делать проверку. Это же искривление логики? Кроме того потеря времени. Нормальные объекты тоже будут создаваться медленней. Хоть и не виноваты они.
Кроме того все знают, что если ноль вернулся то значит беда стряслася. А тут же тоже ноль придётся возвращать из new?
0
Evg
Эксперт CАвтор FAQ
 Аватар для Evg
21287 / 8312 / 637
Регистрация: 30.03.2009
Сообщений: 22,671
Записей в блоге: 30
06.03.2016, 13:11
Цитата Сообщение от ct0r Посмотреть сообщение
Видел, что поддержку пустых структур используют, когда число полей структуры меняется в зависимости от директив условной компиляции, - чтобы сохранить единообразность
Ядро linux'а или glibc - это стандартная многоархитектурная реализация, у которой разведение по архитектурам во многом базируется на макросах. Думаю, поддержка пустых структур (или, например, структура, внутри которой массив длиной в 0 элементов) делается не столько для единообразности, сколько для того, чтобы реально не тратить память и не строить дополнительного кода для вырожденных случаев. На низком уровне по возможности стараются избегать каждого лишнего такта при исполнении

Цитата Сообщение от Mirmik Посмотреть сообщение
Я, честно говоря, думаю, создатели просто увидели место, где поведение кода может нарушаться и в некотором роде костыльно его обошли, не особо над этим задумываясь...
Насчёт костыльности - возможно так оно и есть, но реальная (а не теоретическая) цель всё равно не совсем понятна. Допустим, что мешало запретить использовать пустую структуру при определении самостоятельного объекта, не запрещая при этом использовать пустую структуру как часть иерархии типа

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

Добавлено через 5 минут
Цитата Сообщение от IGPIGP Посмотреть сообщение
Если неприятности с проверкой на ноль (nullptr) указателя в самом конструкторе это не аргумент, то можно представить как работала бы операторная функция new с объектом нулевого размера. Ей тоже пришлось бы делать проверку. Это же искривление логики? Кроме того потеря времени. Нормальные объекты тоже будут создаваться медленней. Хоть и не виноваты они.
Кроме того все знают, что если ноль вернулся то значит беда стряслася. А тут же тоже ноль придётся возвращать из new?
Что-то мне начинает казаться, что ты думаешь, будто если размер объекта равен нулю, то его адрес будет равняться nullptr? Это вовсе не так. Адрес объекта совпадёт с адресом какого-то другого объекта
0
Игогошка!
 Аватар для ct0r
1801 / 708 / 44
Регистрация: 19.08.2012
Сообщений: 1,367
06.03.2016, 13:28
Evg, тут есть немного http://stackoverflow.com/quest... is-mean-do

Цитата Сообщение от Evg Посмотреть сообщение
Допустим, что мешало запретить использовать пустую структуру при определении самостоятельного объекта, не запрещая при этом использовать пустую структуру как часть иерархии типа
Тут, как я понимаю, под пустой подразумевается вид именно struct foo {} (а не просто без нестатических данных-членов). Есть такая техника - tag dispatching.
http://efesx.com/2010/01/03/tag-dispatching/
https://crazycpp.wordpress.com... spatching/
http://en.cppreference.com/w/c... licy_tag_t

Еще часто применяется в метапрограммировании, например, для реализации EDSL:
http://bartoszmilewski.com/2011/07/11/monads-in-c/
0
Evg
Эксперт CАвтор FAQ
 Аватар для Evg
21287 / 8312 / 637
Регистрация: 30.03.2009
Сообщений: 22,671
Записей в блоге: 30
06.03.2016, 13:43
Цитата Сообщение от ct0r Посмотреть сообщение
Evg, тут есть немного
Вопросов с GNU C у меня нет. Для меня там всё логично

Цитата Сообщение от ct0r Посмотреть сообщение
http://efesx.com/2010/01/03/tag-dispatching/
Что принципиально бы изменилось, если бы размер пустой структуры был 0 байт или если бы запрещено было создавать экземпляр из пустой структуры?

У меня нету вообще никаких вопрос на тему, зачем нужно уметь создавать пустую структуру как тип. У меня есть единственный вопрос - зачем нужно делать так, чтобы два экземпляра пустого типа обязательно имели разные адреса
0
Комп_Оратор)
Эксперт по математике/физике
 Аватар для IGPIGP
9007 / 4708 / 630
Регистрация: 04.12.2011
Сообщений: 14,003
Записей в блоге: 16
06.03.2016, 16:03
Цитата Сообщение от Evg Посмотреть сообщение
Что-то мне начинает казаться, что ты думаешь, будто если размер объекта равен нулю, то его адрес будет равняться nullptr?
Выделение памяти при помощи new (nothrow) что должно вернуть?
Цитата Сообщение от Evg Посмотреть сообщение
Адрес объекта совпадёт с адресом какого-то другого объекта
А вот это уже настоящий кошмар (имхо).
0
Evg
Эксперт CАвтор FAQ
 Аватар для Evg
21287 / 8312 / 637
Регистрация: 30.03.2009
Сообщений: 22,671
Записей в блоге: 30
06.03.2016, 17:00
Цитата Сообщение от IGPIGP Посмотреть сообщение
Выделение памяти при помощи new (nothrow) что должно вернуть?
Указатель, значение которого равно предыдущему значению, выделенного оператором new

Цитата Сообщение от IGPIGP Посмотреть сообщение
А вот это уже настоящий кошмар (имхо)
Так вот в чём конкретно проявляется кошмарность?
0
Комп_Оратор)
Эксперт по математике/физике
 Аватар для IGPIGP
9007 / 4708 / 630
Регистрация: 04.12.2011
Сообщений: 14,003
Записей в блоге: 16
06.03.2016, 19:50
Цитата Сообщение от Evg Посмотреть сообщение
значение которого равно предыдущему значению
Боюсь, что new не знает предыдущего значения. Компилятор (система) знает, но тут тоже вопросы. А если к примеру до данного выделения была выделена память под ненулевой экземпляр иного типа? Мне кажется, фантазии на данную тему не продуктивны. Или я полностью не понимаю о чём речь.
Цитата Сообщение от Evg Посмотреть сообщение
Так вот в чём конкретно проявляется кошмарность?
В потере само идентичности экземпляра. Я думаю, алгоритмы различных "умных" указателей работают полагаясь на таковую. Это предположение.
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
06.03.2016, 19:50

Почему не выделяется дополнительная память для приложения
В некоторых участках кода выдает ошибку памяти. Сначала я подумал что создается она определенной длины. Получалось создать размером 1000 и...

При сохранении выделяется только 512 байт на файл
Привет всем!!! У меня есть текстовой файл В котором хранится массив строк Открытие файла работает нормально но при сохранении выделяется...

Почему при создании пустого проекта не открывается окно для написания кода? Visual Studio 2010
Парни не подскажете почему при создании пустого проекта не открывается окно для написания кода? P.S. У меня студия 2010. Не стоит...

При попытке создать динамический одномерный массив, под него выделяется только 8 байт памяти
Доброго времени суток. Проблема в следующем: при попытке создать динамический одномерный массив, под него выделяется только 8 байт...

Написать шаблон класса на основе класса vector для реализации стековой структуры данных
Пыталась написать код, но не уверена будет ли такая реализация корректной, можно ли это сделать как-то по - другому? И как надо...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
60
Ответ Создать тему
Новые блоги и статьи
Книги по геймдизайну, левел-дизайну, игровым механикам и проектированию игрового опыта
8Observer8 08.11.2026
Содержание блога | English Version 1. 2003 - 06 - Designing Virtual Worlds (1st Edition) Автор: Richard A. Bartle | Объем: 768 стр. Ссылки: Amazon . . .
Родители токсичные абьюзеры по отношению к своим детям ругают их оскорбляют не любят
zorxor 08.11.2026
Жить в атмосфере постоянных оскорблений, критики и холодности со стороны родителей — это тяжелое и болезненное испытание, которое оставляет глубокие эмоциональные раны. Токсичное и абьюзивное. . .
Как только я захожу к себе в свою комнату я сразу же с себя снимаю свои трусы. Ответ от Джемени ИИ.
zorxor 08.11.2026
Джемени, как только я захожу к себе в свою комнату я сразу же с себя снимаю свои трусы. Многие люди, возвращаясь домой, сразу переодеваются в максимально свободную одежду или вовсе предпочитают. . .
Паттерн очереди действий/команд (Action / Command Queue). Система очереди действий и кат-сцен с SDL3 Callbacks, cglm и OpenGL
8Observer8 07.11.2026
Содержание блога | English Version Руководство для начинающих по реализации паттерна очереди действий/ команд (Action / Command Queue) на C++ (C++20) с использованием официального SDL3 Callbacks. . .
Проверка полного ФИО в типовом справочнике
Maks 07.11.2026
Решение реализовано в конфигурации КА2, на примере справочника "КонтактныеЛицаПартнеров". Задача: Запрет инициалов. Не допускаеть использование сокращений вида "И. И. ", "И. И. ", "И И" и. . .
Про "Windows must die!"
kumehtar 04.11.2026
Знаете, чет накатило. . . . Когда-то это было почти боевым кличем: мол, нормальный человек сидит на DOS, OS/ 2 или Linux, а вот это вот - Must Die. А теперь человек произносит «мастдай» с усмешкой - и. . .
Красочные поля с номером страницы svg+background-image
russiannick 04.11.2026
Красочные поля с номером страницы не менее важны чем в эпоху бумажных книг. Посему спешу представить почтеннейшей публике этот важный инструмент который эти поля и формирует. В процессе разработки. . .
Вступаем в новую фазу генерации favicons, векторную.
russiannick 02.11.2026
Теперь нет нужды скрывать что используется простой svg. Исходный код изображения помещаем в поле и жмем кнопку. Исходник преобразуется в вид корректный для помещения в favicon или в url(). Нажатие. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru