HLFX.Ru Forum Страницы (13): « 1 2 [3] 4 5 6 7 » ... Последняя »
Показать все 188 сообщений этой темы на одной странице

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", я правильно понял логику программиста?

__________________

xaerox on Vivino


Отправлено Дядя Миша 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, а не логики как таковой.

__________________

xaerox on Vivino


Отправлено Дядя Миша 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:

Цитата:
Дядя Миша писал:
В данном случае, у нас яблок сколько угодно, но нам лень их раскладывать по коробкам. Мы хотим чтобы все яблоки прыгнули в коробки, по примеру первого.

Ок, но тогда и синтаксис должен как-то отличаться, хотя бы скобками, по примеру инициализации вектора. Иначе как мы отличим ситуацию ограниченных ресурсов от неограниченных?

__________________

xaerox on Vivino


Отправлено Дядя Миша 22-05-2022 в 19:04:

Опять же, важный момент замечу.

C++ Source Code:
char foo[32] = { 0 };

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

Добавлено 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:

Цитата:
Дядя Миша писал:
Впрочем, можно вообще убрать нахрен все скобки. Думаю это будет самый оптимальный вариант. Инициализация без скобок вообще забьёт массив одним и тем же числом. Сохраняем совместимость и вводим новую особенность.

Этот вариант звучит неплохо, кстати.
Тогда логика будет такая: есть скобки - инициализируем данными из списка инициализации, нет скобок - заполняем одним значением.

__________________

xaerox on Vivino


Отправлено Дядя Миша 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
while( 0 )
2
{
3
  int	i;
4
}

В чём тут смысл:
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:
typedef class *class_t;

Но при попытке что-то присвоить такому указателю выдаётся ошибка:
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?

Безымянный класс, что тебя смущает?
Это совершенно легальная конструкция в плюсах. Но указатель бесполезен, да.

__________________

xaerox on Vivino


Отправлено Дядя Миша 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 называется.

Ты навсякий случай много таких классов не создавай. А то по двести будет!

__________________

xaerox on Vivino


Временная зона GMT. Текущее время 05:25. Страницы (13): « 1 2 [3] 4 5 6 7 » ... Последняя »
Показать все 188 сообщений этой темы на одной странице

На основе vBulletin версии 2.3.0
Авторское право © Jelsoft Enterprises Limited 2000 - 2002.
Дизайн и программирование: Crystice Softworks © 2005 - 2024