HLFX.Ru Forum (https://hlfx.ru/forum/index.php)
- Флуд (https://hlfx.ru/forum/forumdisplay.php?forumid=11)
-- Заметки на полях (https://hlfx.ru/forum/showthread.php?threadid=5815)
Отправлено Дядя Миша 22-05-2022 в 18:36:
Цитата:
XaeroX писал:
Она очень человеческая, но не математическая.
В данном случае я руководствуюсь логикой программиста.
У программиста в программе бывает два количества объектов: еденичный объект и сколько угодно объектов. Таким образом если что-то указано ОДИН РАЗ - значит это надо применить ко всему. Если больше одного, ну неважно сколько - значит имелось в виду что-то еще.
Помоему логично? Потому что в программировании есть волшебные константы 0 и 1. Любые другие числа, это уже хак.__________________
My Projects: download page
F.A.Q по XashNT
Блог разработчика в телеграме
Цитата:
C:\DOCUME~1\C4C5~1\LOCALS~1\Temp\a33328if(72) : see declaration of 'size_t'
Отправлено XaeroX 22-05-2022 в 18:44:
Цитата:
Дядя Миша писал:
я руководствуюсь логикой программиста
Впервые слышу о такой.
Цитата:
Дядя Миша писал:
Таким образом если что-то указано ОДИН РАЗ - значит это надо применить ко всему. Если больше одного, ну неважно сколько - значит имелось в виду что-то еще.
Предположим, у нас есть строка s, заранее выделенная, размером 8 символов.
Тогда, по твоей логике, присвоение:
s = "ab";
даст нам строку "ab", а вот такое присвоение:
s = "a";
даст нам строку "aaaaaaaa", я правильно понял логику программиста?__________________
Отправлено Дядя Миша 22-05-2022 в 18:49:
XaeroX всё что я написал выше касается только инициализации массивов, очевидно же. Здесь неинтуитивный момент.
Причём ожидаемое поведение действительно бывает нужно.
Потому что повторюсь, мемсет тоже делает не то, что нужно.
Приходится в цикле присваивать. Т.е. оба способа последовательно фейлят.
Добавлено 22-05-2022 в 21:49:
Цитата:
XaeroX писал:
Предположим, у нас есть строка s, заранее выделенная, размером 8 символов.
Ах да, совсем забыл. В моей VM строки - это не массивы 
Это отдельный атомарный тип. Поэтому проблемы нет.__________________
My Projects: download page
F.A.Q по XashNT
Блог разработчика в телеграме
Цитата:
C:\DOCUME~1\C4C5~1\LOCALS~1\Temp\a33328if(72) : see declaration of 'size_t'
Отправлено XaeroX 22-05-2022 в 18:55:
Цитата:
Дядя Миша писал:
всё что я написал выше касается только инициализации массивов, очевидно же. Здесь неинтуитивный момент.
Как раз с житейской точки зрения - очень интуитивный.
Вот допустим, у тебя есть пять коробок, и тебе дали два яблока, положить их по коробкам. Что ты сделаешь? Положишь в две, а три будут пустыми ("инициализированными нулём"). А если у тебя всего одно яблоко - с какого же такого перепугу у тебя в каждой коробке появится по яблоку?
Цитата:
Дядя Миша писал:
Причём ожидаемое поведение действительно бывает нужно.
Для этого в некоторых языках придумали функции типа fill.
Ну или в том же STL, ты можешь написать:
C++ Source Code:
std::vector<int> vec(5, 6); |
что создаст тебе вектор из 5 элементов, каждый из которых равен 6.
Это логично, потому что ты сначала задаёшь размер вектора, а потом - чем его инициализировать. Но это неинтуитивно, потому что заменив скобки:
C++ Source Code:
std::vector<int> vec{5,6}; |
мы получим вектор из двух элементов 5 и 6.
Но это скорее проблема std::initializer_list из С++11, а не логики как таковой.__________________
Отправлено Дядя Миша 22-05-2022 в 18:58:
XaeroX неудачный пример. Ты приводишь в пример ресурсы, которые могут дать, а могут и не дать. В данном случае, у нас яблок сколько угодно, но нам лень их раскладывать по коробкам. Мы хотим чтобы все яблоки прыгнули в коробки, по примеру первого.
__________________
My Projects: download page
F.A.Q по XashNT
Блог разработчика в телеграме
Цитата:
C:\DOCUME~1\C4C5~1\LOCALS~1\Temp\a33328if(72) : see declaration of 'size_t'
Отправлено XaeroX 22-05-2022 в 18:59:
Цитата:
Дядя Миша писал:
В данном случае, у нас яблок сколько угодно, но нам лень их раскладывать по коробкам. Мы хотим чтобы все яблоки прыгнули в коробки, по примеру первого.
Ок, но тогда и синтаксис должен как-то отличаться, хотя бы скобками, по примеру инициализации вектора. Иначе как мы отличим ситуацию ограниченных ресурсов от неограниченных?__________________
Отправлено Дядя Миша 22-05-2022 в 19:04:
Опять же, важный момент замечу.
C++ Source Code:
Справедливо только для строк, потому что оно делает именно то, что нам надо - обнуляет первый символ. Даже если в остальные согласно какому-то стандарту запишется мусор, это будет уже неважно - главное что первый символ обнулён. Для строки, которая массив это критично важно.
А вот для остальных массивов - не очень, т.к. к ним в нагрузку обычно идёт счётчик использования, который увеличивают уже после того, как очередной элемент был проинициализирован. Т.е. мусор в массиве нас беспокоит меньше всего, за исключением строк, с которыми никто никакой счётчик не таскает, а наоборот - ориентируются по терминатору.
Т.е. твои примеры касательно строк правильные, но для меня неактуалны, т.к. в моем языке строка занимает четырёхбайтный идентификатор, а не массив.
Добавлено 22-05-2022 в 22:03:
Цитата:
XaeroX писал:
Ок, но тогда и синтаксис должен как-то отличаться
Не. Достаточно просто того, что мы указали ОДИН РАЗ. Впрочем, можно вообще убрать нахрен все скобки. Думаю это будет самый оптимальный вариант. Инициализация без скобок вообще забьёт массив одним и тем же числом. Сохраняем совместимость и вводим новую особенность.
Добавлено 22-05-2022 в 22:04:
В крайнем случае можно вывести варнинг nonstandard extension used или что-то вродеэ того. 
__________________
My Projects: download page
F.A.Q по XashNT
Блог разработчика в телеграме
Цитата:
C:\DOCUME~1\C4C5~1\LOCALS~1\Temp\a33328if(72) : see declaration of 'size_t'
Отправлено XaeroX 22-05-2022 в 19:11:
Цитата:
Дядя Миша писал:
Даже если в остальные согласно какому-то стандарту запишется мусор, это будет уже неважно - главное что первый символ обнулён.
Нет такого стандарта, который поддерживает частичную инициализацию переменной. Нельзя быть немножко беременной и частично инициализированной. Сегодня мы инициализируем только один байт, а завтра что? Инициализируем только пару битов?
Поэтому всегда, если есть конструкция инициализации, переменная гарантированно будет инициализирована целиком. Данными, нулями, вызовом дефолт-конструктора - не суть важно, но мусора там точно не будет.
Добавлено 22-05-2022 в 15:11:
Цитата:
Дядя Миша писал:
Впрочем, можно вообще убрать нахрен все скобки. Думаю это будет самый оптимальный вариант. Инициализация без скобок вообще забьёт массив одним и тем же числом. Сохраняем совместимость и вводим новую особенность.
Этот вариант звучит неплохо, кстати.
Тогда логика будет такая: есть скобки - инициализируем данными из списка инициализации, нет скобок - заполняем одним значением.__________________
Отправлено Дядя Миша 22-05-2022 в 19:13:
Цитата:
XaeroX писал:
Тогда логика будет такая: есть скобки - инициализируем данными из списка инициализации, нет скобок - заполняем одним значением.
Да, особенно если учесть, что студия выдаёт ошибку при попытке прямого присвоения к массиву, это не вызовет разночтений.__________________
My Projects: download page
F.A.Q по XashNT
Блог разработчика в телеграме
Цитата:
C:\DOCUME~1\C4C5~1\LOCALS~1\Temp\a33328if(72) : see declaration of 'size_t'
Отправлено Дядя Миша 28-05-2022 в 12:13:
Расскажу вам как появился знаменитый баг компилятора MSVC 6.0, связанный с выпадением счётчика цикла за пределы видимости самого цикла.
Очень просто. Дело в том, что любая область внутри фигурных скобок считается как область подвидимости функции. Причём компилятор не различает к чему относятся эти скобки, для него это просто новая секция.
И такое поведение в принципе корректно для любых конструкций. Больше нигде никаких переменных не объявляется, ни в do ни во while, ни в switch ни в if. А чистый Си не дозволял объявлять в секции инициализации for новые переменные. Ну вот так этот баг только для одного for и приключился.
Невнимательность 
Там надо было зайти в подобласть видимости уже после ключевого слова for.
Вот и вся хитрость.
Добавлено 28-05-2022 в 15:13:
Очередная чумовая проверка компиляторов на вшивость
C++ Source Code:
В чём тут смысл:
1. условие константное
2. условие никогда не будет выполнено
Следовательно код в секции - мёртвый и его можно вообще скипнуть, не пытаясь распарсить. А как это проверить? Ну вот суём и смотрим - будет ли ругань на unreferenced local variable в разных режимах компиляции.
Если код был просто пропущен, то ессно ругани не будет.__________________
My Projects: download page
F.A.Q по XashNT
Блог разработчика в телеграме
Цитата:
C:\DOCUME~1\C4C5~1\LOCALS~1\Temp\a33328if(72) : see declaration of 'size_t'
Отправлено Дядя Миша 06-06-2022 в 14:24:
Очередная чумовая проверка компиляторов от дяди Мишы.
Вставьте куда-нибудь вне любой функции неименованый блок скобок
C++ Source Code:
И посмотрите как будет ругаться компилятор. Вы возможно не задумывались, но это запрещённая конструкция по сути. Неименованный блок скобок возможен только внутри тела функции, как subscope.__________________
My Projects: download page
F.A.Q по XashNT
Блог разработчика в телеграме
Цитата:
C:\DOCUME~1\C4C5~1\LOCALS~1\Temp\a33328if(72) : see declaration of 'size_t'
Отправлено Дядя Миша 08-06-2022 в 15:46:
Очевидное-невероятное. Шестёрка всё-таки даёт создать конструкцию вида
C++ Source Code:
Но при попытке что-то присвоить такому указателю выдаётся ошибка:
C++ Source Code:
'=' : cannot convert from 'class CScriptCompiler *const ' to 'class $S60 *' |
Что это за класс $60?__________________
My Projects: download page
F.A.Q по XashNT
Блог разработчика в телеграме
Цитата:
C:\DOCUME~1\C4C5~1\LOCALS~1\Temp\a33328if(72) : see declaration of 'size_t'
Отправлено XaeroX 08-06-2022 в 15:47:
Цитата:
Дядя Миша писал:
Что это за класс $60?
Безымянный класс, что тебя смущает? 
Это совершенно легальная конструкция в плюсах. Но указатель бесполезен, да.__________________
Отправлено Дядя Миша 08-06-2022 в 15:55:
ЗЫ. от константности никак не зависит, всё равно не даёт.
Чувствую себя Скаржем, у которого унреал не запустился на 8086.
Добавлено 08-06-2022 в 18:48:
Цитата:
XaeroX писал:
Это совершенно легальная конструкция в плюсах.
Так у меня она не только легальная, но и юзабельная. Я её использую как указатель на абстрактный класс.
Добавлено 08-06-2022 в 18:55:
Цитата:
XaeroX писал:
Безымянный класс, что тебя смущает?
Да гдеж он безымянный? Доллар по 60 называется.__________________
My Projects: download page
F.A.Q по XashNT
Блог разработчика в телеграме
Цитата:
C:\DOCUME~1\C4C5~1\LOCALS~1\Temp\a33328if(72) : see declaration of 'size_t'
Отправлено XaeroX 08-06-2022 в 15:56:
Цитата:
Дядя Миша писал:
Да гдеж он безымянный? Доллар по 60 называется.
Ты навсякий случай много таких классов не создавай. А то по двести будет!__________________