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

Есть ли тут UB ?

09.03.2020, 12:27. Показов 3634. Ответов 55
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Добрый день, не могу разобрать вот такую ситуацию:

C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
#include <iostream>
 
using namespace std;
 
class A
{
public:
    A() { std::cout << "Adef" << std::endl; x = 4; }
    A(const A& _a) { std::cout << "cA&" << std::endl; x = 7; }
    unsigned x;
};
 
class B : public A
{
public:
    unsigned y;
    B()
    {std::cout << "Bdef" << std::endl; x = 3; y = 8; }
    B(const B& _b)
    { std::cout << "cB&" << std::endl; x = 7; }
    B& operator =(const B&)
    { std::cout << "B=&" << std::endl; x = 7; return *this; }
    int foo() const volatile { std::cout << "foo" << std::endl; return 555; }
};
 
int main()
{
    using std::cout;
    using std::endl;
    cout << "-----------" << endl;
    // class B : public A
    A * pa = new A; 
    A & ra = *pa;
    cout << "-----------" << endl;
    B & rb = static_cast<B&>(ra);
    rb.foo();
    rb.y = 55;
    cout << "-----------" << endl;
    return 0;
}
С одной стороны идёт обращение к полям и методам класса B, а с другой его конструктор нигде не вызывается.
0
Programming
Эксперт
39485 / 9562 / 3019
Регистрация: 12.04.2006
Сообщений: 41,671
Блог
09.03.2020, 12:27
Ответы с готовыми решениями:

Есть ли тут такие, у кого есть свои идеи ,касающиеся компьютерной безопасности,например, по защите от вирусов?
Есть ли тут такие, у кого есть свои идеи ,касающиеся компьютерной безопасности,например, по защите от вирусов?

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

И есть ли тут вообще список?
Есть программа. Скажите, какой это вид списка? И есть ли тут вообще список? struct car{ char name; // название марки машины int...

55
248 / 70 / 9
Регистрация: 22.07.2018
Сообщений: 321
10.03.2020, 11:20
Студворк — интернет-сервис помощи студентам
Цитата Сообщение от TheCalligrapher Посмотреть сообщение
Вы, похоже, находитесь в плену заблуждения, полагая, что я высказываю некое "свое мнение", с которым можно не соглашаться.
Это не так. Я лишь привожу факты из стандарта языка, где по этому вопросу все написано четко, понятно и однозначно. Ни о каком "не согласен" в данном случае речи быть не может.
Есть толстота, на которую ты не ведёшься?
0
Вездепух
Эксперт CЭксперт С++
 Аватар для TheCalligrapher
13239 / 6871 / 1827
Регистрация: 18.10.2014
Сообщений: 17,417
10.03.2020, 11:21
Цитата Сообщение от IGPIGP Посмотреть сообщение
Задавая свой вопрос, я привёл данный фрагмент с пояснением своего понимания и не понимания вашего понимания. Привожу ещё раз. Объяснения не стану повторять.
Я уже ответил на это: читайте дальше. Вы зачем-то обрезали предложение из стандарта на запятой. Зачем? Надо читать весь абзац по ссылке. (Один абзац - это "простыня"? Серьезно?)

И, как я уже ответил выше, ни слова ни о каких "попытках доступа" там нет. Если вы это называете "своим пониманием", то мне останется лишь молча развести руками...
0
Неэпический
 Аватар для Croessmah
18150 / 10732 / 2067
Регистрация: 27.09.2012
Сообщений: 27,047
Записей в блоге: 1
10.03.2020, 11:22
Цитата Сообщение от IGPIGP Посмотреть сообщение
Вы подали ссылку размером с простыню. Я прочёл выделенный фрагмент и там
Ссылка ведет ровно на один пункт стандарта, который даже выделен зелененьким цветом. Читайте весь пункт, а не только первое предложение. Какое из предложений вам не понятно? Возможно, вам поможет это: https://stackoverflow.com/a/49400343/10358504
Там про указатели, но не суть, т.к. в той же самой проклятой спецификации c++, написанной, как вам известно, непонятливыми дядьками, есть такой пунктик не только для ссылок, но и для указателей.
0
Комп_Оратор)
Эксперт по математике/физике
 Аватар для IGPIGP
9007 / 4708 / 630
Регистрация: 04.12.2011
Сообщений: 14,003
Записей в блоге: 16
10.03.2020, 11:40
Цитата Сообщение от TheCalligrapher Посмотреть сообщение
Вы, похоже, находитесь в плену заблуждения, полагая, что я высказываю некое "свое мнение", с которым можно не соглашаться.
Это формулировка лучше. Да. Я явно согласился с тем что не смог понять ваших доводов:
Цитата Сообщение от IGPIGP Посмотреть сообщение
TheCalligrapher, я не смог понять. В ссылке говорится о том, что если есть нарушение квалификаторов то программа плохо (уродливо) написана. Но сам по себе статик каст ссылки родителя к потомку там разрешен, ведь:
Ваших доводов, TheCalligrapher. Именно так. Даже если бы вы привели бумагу от комитета, освящающую ваш сан верховного судьи, я бы задал вопос который мне не понятен.
Теперь о мотивации, подробнее раз уж вы хотите о ней поговорить.
Цитата Сообщение от TheCalligrapher Посмотреть сообщение
Вы, похоже, находитесь в плену заблуждения, полагая, что я высказываю некое "свое мнение"
Я нахожусь в разделе новичков С++ в теме которая в новичковской упаковке не проста, но при определённом подходе доступна к пониманию. Сужающее преобразование не ошибка, но возлагает ответственность и может привести к ошибке.
По факту тема остановилась на большом фрагменте из черновика и объяснении без объяснения.
Я не хочу, чтобы новички из тех кто послабее духом, сразу отвернулись от этого языка.
TheCalligrapher, вместо попыток анализировать мою нравственность, психику и стиль изложения я предлагаю вам (в третий раз) объяснить, какое место (1-2 строки) из приведенного вами стандарта черновика, конфликтует с местом (тоже 1-2 строки) из кода ТС. Подробно можете не разжёвывать, учитывая вашу реакцию. Что не пойму, - спрошу далее.
Нельзя оставлять такую тему в таком состоянии (имхо).

Добавлено через 6 минут
Цитата Сообщение от Croessmah Посмотреть сообщение
Ссылка ведет ровно на один пункт стандарта, который даже выделен зелененьким цветом. Читайте весь пункт, а не только первое предложение.
Croessmah, я изложил вопрос. Меня интересует вопрос какие из ограничений превращают каст родителя в наследника в UB, нарушены в коде ТС. Не нужно призывать меня читать. Приведите простой ответ. Иначе разговор похож на бормотание чернокнижников. Поверьте, тема выиграет 1000-кратно.
0
Вездепух
Эксперт CЭксперт С++
 Аватар для TheCalligrapher
13239 / 6871 / 1827
Регистрация: 18.10.2014
Сообщений: 17,417
10.03.2020, 11:40
Н-да... Значит так: исчерпывающие ответы на исходный вопрос я уже дал. А вот эти вот феерические разглагольствования "ни о чем" мне не интересны.
0
Комп_Оратор)
Эксперт по математике/физике
 Аватар для IGPIGP
9007 / 4708 / 630
Регистрация: 04.12.2011
Сообщений: 14,003
Записей в блоге: 16
10.03.2020, 11:46
Цитата Сообщение от TheCalligrapher Посмотреть сообщение
Н-да... Значит так: исчерпывающие ответы на исходный вопрос я уже дал. А вот эти вот феерический разглагольствования "ни о чем" мне не интересны.
Ну так бы и сказали сразу.

Добавлено через 4 минуты
Ваш ответ говорит о том, что если результат преобразования трактуется как ссылка на объект базового класса то ок, а иначе не ок. Это не про то, что само преобразование не ок:
Цитата Сообщение от TheCalligrapher Посмотреть сообщение
If the object of type “cv1 B” is actually a base class subobject of an object of type D, the result refers to the enclosing object of type D. Otherwise, the behavior is undefined.
Я это отметил и спросил ещё раз. Что не так?
Больше не стану вам досаждать. Всего хорошего.
0
19506 / 10109 / 2464
Регистрация: 30.01.2014
Сообщений: 17,834
10.03.2020, 11:49
Цитата Сообщение от IGPIGP Посмотреть сообщение
Мой вопрос о том, какое из перечисленных ограничений нарушено, для трактовки его кода как illformed с точки зрения приведенного фрагмента черновика стандарта.
На всякий случай: ill-formed, грубо говоря, означает почти всегда, что программа не должна компилироваться. Единственный случай, который я могу вспомнить, когда ill-formed программа компилируется - это программа с нарушением ODR (потому что нарушение ODR не обязано диагностироваться). Короче говоря, UB и ill-formed - это разные вещи.
Программа с кастом выше вполне well-formed, т.е. она компилируется, но приводит к UB. Таким образом пункты, которые описывают случаи, когда программа ill-formed нам не интересны, т.к. не имеют отношения к делу.
0
Неэпический
 Аватар для Croessmah
18150 / 10732 / 2067
Регистрация: 27.09.2012
Сообщений: 27,047
Записей в блоге: 1
10.03.2020, 13:01
Цитата Сообщение от IGPIGP Посмотреть сообщение
Меня интересует вопрос какие из ограничений превращают каст родителя в наследника в UB, нарушены в коде ТС.
Вам же выше уже написали. Ну давайте оппробуем еще раз.
TheCalligrapher, поправит меня, если что, я уверен.
Цитата Сообщение от цитата по ссылке
An lvalue of type “cv1 B”, where B is a class type, can be cast to type “reference to cv2 D”, where D is a class derived from B, if cv2 is the same cv-qualification as, or greater cv-qualification than, cv1. If B is a virtual base class of D or a base class of a virtual base class of D, or if no valid standard conversion from “pointer to D” to “pointer to B” exists ([conv.ptr]), the program is ill-formed. An xvalue of type “cv1 B” can be cast to type “rvalue reference to cv2 D” with the same constraints as for an lvalue of type “cv1 B”. If the object of type “cv1 B” is actually a base class subobject of an object of type D, the result refers to the enclosing object of type D. Otherwise, the behavior is undefined.
Вы привели кусок текста, который я пометил зеленым цветом. Переименуем сущности в коде ТС, чтобы он был ближе к тексту

C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
class B//class A в коде ТС
{
    //...
};
 
class D //class B в коде ТС
    : public B
{
    //...
};
 
int main()
{
    B * pb = new B; 
    B & rb = *pb;
    D & rd = static_cast<D&>(rb);//в памяти объект типа B
}
Так вот в зеленом кусочке сказано о том, что если класс D производный от класса B, то мы можем выполнить static_cast<D&>(rb);. В данном фрагменте речь идет о типах, о том, что такое преобразование между такими типами разрешено.

В красном фрагменте речь идет об объектах, о том, что если при static_cast<D&>(rb) rb является подобъектом базового класса объекта типа D, то всё хорошо, мы получаем ссылку на подъобъект типа D. В ином случае получаем неопределенное поведение.

В нашем коде, в памяти лежит объект типа B, который не является подобъектом базового класса объекта типа D, поэтому имеет место неопределенное поведение.
2
Комп_Оратор)
Эксперт по математике/физике
 Аватар для IGPIGP
9007 / 4708 / 630
Регистрация: 04.12.2011
Сообщений: 14,003
Записей в блоге: 16
10.03.2020, 13:02
Цитата Сообщение от Croessmah Посмотреть сообщение
If the object of type “cv1 B” is actually a base class subobject of an object of type D, the result refers to the enclosing object of type D. Otherwise, the behavior is undefined.
Тут по английски написано что:
Цитата Сообщение от попытка перевода
Если объект типа «cv1 B» на самом деле является подобъектом базового класса объекта типа D, результат ссылается на включённый объект в типе D. В противном случае поведение не определено.
То есть, полученная ссылка ссылается на подобъект. Если вы используете её как ссылку на объект (обращение к несуществующим членам) - поведение не определено.
Ещё раз:
результат ссылается на
означает, что результат есть и он ссылается . Это значит что приведение само по себе не виновато. Вопрос в том что имел ввиду программист в смысле дальнейшего доступа.
Я так это понял. Тогда не ясно, что в коде ТС не так. Я могу привести примеры, где статик каст родителя к наследнику используется в паттернах проектирования и не считается UB.
Об этом я и спрашиваю.
Croessmah, может я и не верх проницательности, но есть вероятность, что если я не понял то кто-то из новичков может тоже не понять. Момент затронутый в теме не прост как табурет. В нём есть нюансы. Я попытался получить подробный и ясный ответ с объяснением.
Вам может показаться диким, но на англоязычных сайтах, люди из комитета по стандартизации - разработчики топовых компиляторов, не считают зазорным писать многостраничные тексты с примерами и пояснениями такими подробными, что диву даёшься. Может и не стоит их копировать, но есть что подсмотреть и намотать на ус. Если интересно, могу привести ссылки.
0
13 / 13 / 1
Регистрация: 19.10.2019
Сообщений: 607
10.03.2020, 13:05  [ТС]
Помоему тут нет какото интересной ситуации чтоб так долго спорить.
Яж создал ночью тему с действительно прикольной интересной фишкой, когда один виртуальный метод переопределяет несколько абстрактных и ноль внимания.
0
Комп_Оратор)
Эксперт по математике/физике
 Аватар для IGPIGP
9007 / 4708 / 630
Регистрация: 04.12.2011
Сообщений: 14,003
Записей в блоге: 16
10.03.2020, 13:08
Цитата Сообщение от Croessmah Посмотреть сообщение
В нашем коде, в памяти лежит объект типа B, который не является подобъектом базового класса объекта типа D, поэтому имеет место неопределенное поведение.
Если это так и есть "в нашем коде", то ясно дело. Но как быть с:
Цитата Сообщение от squareroot Посмотреть сообщение
class B : public A
Тут разве B не подобъект A??
Но мы же приводим А к В... Что-то я читаю вверх ногами видимо. Давайте ещё пересмотрю...
0
13 / 13 / 1
Регистрация: 19.10.2019
Сообщений: 607
10.03.2020, 13:10  [ТС]
Господа, вот более интересная ситуация Насколько корректен такой код ?
0
Неэпический
 Аватар для Croessmah
18150 / 10732 / 2067
Регистрация: 27.09.2012
Сообщений: 27,047
Записей в блоге: 1
10.03.2020, 13:13
Цитата Сообщение от IGPIGP Посмотреть сообщение
Тогда не ясно, что в коде ТС не так.
Выше уже ни один раз написано что не так, а вы всё за своё.
Цитата Сообщение от IGPIGP Посмотреть сообщение
То есть, полученная ссылка ссылается на подобъект.
Если в памяти лежит объект, который не является подобъектом объекта целевого типа, то получается не ссылка на подобъект, а неопределенное поведение, даже если это работает как вам нужно везде и всегда. Там даже нет нужного объекта и ссылка получается вникуда.
0
19506 / 10109 / 2464
Регистрация: 30.01.2014
Сообщений: 17,834
10.03.2020, 13:16
Цитата Сообщение от IGPIGP Посмотреть сообщение
Если объект типа «cv1 B» на самом деле является подобъектом базового класса объекта типа D, результат ссылается на включённый объект в типе D. В противном случае поведение не определено.
Смысл такой:
Если объект типа «cv B» на самом деле НЕ является подобъектом базового класса объекта типа D, ТО поведение не определено.
Об использовании результата речи не идет.
2
Комп_Оратор)
Эксперт по математике/физике
 Аватар для IGPIGP
9007 / 4708 / 630
Регистрация: 04.12.2011
Сообщений: 14,003
Записей в блоге: 16
10.03.2020, 13:17
safdgsagh
Цитата Сообщение от Croessmah Посмотреть сообщение
Если в памяти лежит объект, который не является подобъектом объекта целевого типа, то получается не ссылка на подобъект, а неопределенное поведение, даже если это работает как вам нужно везде и всегда. Там даже нет нужного объекта и ссылка получается вникуда.
Тут разве B не подобъект A??
он конечно суперкласс но он подобъект. Это дерьмовое терминоложество меня достаёт но черт его знает как понимать вашу фразу "красным" иначе.
Базовый класс - супер класс но его объек включен в наследник enclosing как часть - подобъект. Иначе не ясно.
Ладно, до вечера перерыв. Дайте все ещй пару раз попытаться перевести на человеческую речь.
0
Неэпический
 Аватар для Croessmah
18150 / 10732 / 2067
Регистрация: 27.09.2012
Сообщений: 27,047
Записей в блоге: 1
10.03.2020, 13:21
Цитата Сообщение от IGPIGP Посмотреть сообщение
Тут разве B не подобъект A??
В памяти лежит объект типа A. Мы производим каст к B&, а объект типа A в памяти - самостоятельный объект, а не подобъект объекта типа B.

Добавлено через 2 минуты
C++
1
2
3
A * pa = new B; //В памяти объект типа B
A & ra = *pa;//Ссылаемся на подобъект типа A
B & rb = static_cast<B&>(ra);//ok, в памяти объект типа B
C++
1
2
3
4
//код ТС
A * pa = new A; //В памяти объект типа A
A & ra = *pa;
B & rb = static_cast<B&>(ra);//объект в памяти не является подобъектом объекта типа B - ub
3
Комп_Оратор)
Эксперт по математике/физике
 Аватар для IGPIGP
9007 / 4708 / 630
Регистрация: 04.12.2011
Сообщений: 14,003
Записей в блоге: 16
10.03.2020, 13:57
Croessmah, если имеется в виду то что вы описали, то теперь понятно. Я хочу ещё поперечитывать и подумать. Спасибо)
0
Вездепух
Эксперт CЭксперт С++
 Аватар для TheCalligrapher
13239 / 6871 / 1827
Регистрация: 18.10.2014
Сообщений: 17,417
10.03.2020, 17:34
Цитата Сообщение от IGPIGP Посмотреть сообщение
Тут по английски написано что:
Если объект типа «cv1 B» на самом деле является подобъектом базового класса объекта типа D, результат ссылается на включённый объект в типе D. В противном случае поведение не определено.
То есть, полученная ссылка ссылается на подобъект.
Нет, написано, что если объект типа «cv1 B» на самом деле является подобъектом базового класса объекта типа D, то полученная ссылка ссылается на подобъект. Это условие "если" в нашем примере не соблюдено, то есть ни о каком "полученная ссылка ссылается на подобъект" речи идти не может. Никакая ссылка никуда не ссылается. Требование, выделенное красным, нарушено, поэтому включается ветка "В противном случае поведение не определено".

Все предельно четко и понятно.

Цитата Сообщение от IGPIGP Посмотреть сообщение
Если вы используете её как ссылку на объект (обращение к несуществующим членам) - поведение не определено.
Снова одни и те же выдумки. Это что-ли умышленный троллинг? Никакого "если вы используете её как ссылку на объект" там нет. Каким образом можно, уже приведя перевод (причем правильный, я его еще раз процитирую)

Если объект типа «cv1 B» на самом деле является подобъектом базового класса объекта типа D, результат ссылается на включённый объект в типе D. В противном случае поведение не определено.
увидеть в этом переводе некое "если вы используете", которого там и близко нет?

Цитата Сообщение от IGPIGP Посмотреть сообщение
Ещё раз:
результат ссылается на
означает, что результат есть и он ссылается . Это значит что приведение само по себе не виновато.
Нет. Никакого "результат есть и он ссылается" там не написано. Написано (еще раз): "если объект типа «cv1 B» на самом деле является подобъектом базового класса объекта типа D, то полученная ссылка ссылается на подобъект". Написано, что никакого результата нет и он никуда не ссылается.

Все предельно четко и понятно.

P.S. Где тут наш argcargv? Это мы тут все "ведемся на толстоту"? Или все таки это "художник так видит" на полном серьезе?
0
Комп_Оратор)
Эксперт по математике/физике
 Аватар для IGPIGP
9007 / 4708 / 630
Регистрация: 04.12.2011
Сообщений: 14,003
Записей в блоге: 16
10.03.2020, 18:46
Цитата Сообщение от TheCalligrapher Посмотреть сообщение
Тут по английски написано что:
TheCalligrapher, я читаю черновики с особым "удовольствием". Когда в начале раздела B определён как Base, а D как Derived:
Цитата Сообщение от Croessmah Посмотреть сообщение
An lvalue of type “cv1 B”, where B is a class type, can be cast to type “reference to cv2 D”, where D is a class derived from B
а потом допускается, что всё наоборот, то не шиза ли косит тех кто это пишет? Еще интереснее отличия герундия closing, present continuous: is closing и пассивного залога is closed. Когда-то херунд был признан (х)ерундой разумной частью человечества не зря. Бывает очень не просто понять "кто на ком стоял" в пассивном залоге.
Ну да ладно.
Я хочу ещё почитать и подумать. Супер класс подобъект субкласса... Всё это не троллинг. Я пока вижу что при множественном наследовании могут проводиться скрытые вычисления при создании ссылки, которые читают (разыменовывают) память. В этом случае без каких либо конструкторов (упомянутых ТС) реализация может привести к непредсказумым результатам. Для одиночного наследования не должно быть проблем. Но согласен. Интерпретировать стандарт дело неблагодарное. Написано, значит написано.
0
19506 / 10109 / 2464
Регистрация: 30.01.2014
Сообщений: 17,834
10.03.2020, 19:02
Цитата Сообщение от IGPIGP Посмотреть сообщение
а потом допускается, что всё наоборот, то не шиза ли косит тех кто это пишет?
Где допускается?
Всегда в С++ было, что подобъект - это базовый класс, а не наоборот.
1
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
inter-admin
Эксперт
29715 / 6470 / 2152
Регистрация: 06.03.2009
Сообщений: 28,500
Блог
10.03.2020, 19:02

Есть ли тут ошибки? У меня С++ виснет и ничего не выдает
#include &quot;stdafx.h&quot; #include &lt;cstring&gt; #include &lt;iostream&gt; #include &lt;string&gt; #include &lt;cstdlib&gt; using namespace std; ...

Есть тут кто работает с++ + intel xeon phi 5110p ?
Добрый день, хотел бы пообщаться на эту тему, кто пишет на с++ уже софт и занимается отладной используя intel xeon phi 5110p.

Даны натуральные числа n, k. Проверить, есть ли в записи числа nk цифра m. тут число n в степени k, то есть k
Даны натуральные числа n, k. Проверить, есть ли в записи числа nk цифра m. Надо оформить данный код в HTML документ. var n =...

Тут есть профессионалы по JS
Ищу профессионала для создания очень простого скрипта,в JavaScript

Тут есть Ошибка?
using System; using System.Collections.Generic; using System.Linq; using System.Text; namespace ConsoleApplication1 { ...


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

Или воспользуйтесь поиском по форуму:
40
Ответ Создать тему
Новые блоги и статьи
Книги по геймдизайну, левел-дизайну, игровым механикам и проектированию игрового опыта
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