HLFX.Ru Forum
Показать все 13 сообщений этой темы на одной странице

HLFX.Ru Forum (https://hlfx.ru/forum/index.php)
- Half-Life SDK (https://hlfx.ru/forum/forumdisplay.php?forumid=8)
-- BOOL, TRUE, FALSE (https://hlfx.ru/forum/showthread.php?threadid=3898)


Отправлено ONeiLL 03-05-2013 в 12:20:

BOOL, TRUE, FALSE

Вопрос может глупый, но я не могу понять, зачем в ХЛ юзается BOOL вместо обычного bool. В чём профит от использования int вместо bool?


Отправлено Дядя Миша 03-05-2013 в 13:16:

для сопряжения движка, написанного на Си и библиотек, написанных на С++. В чистом Си нет такой переменной BOOL, и там сами делают, кто во что горазд. Часть таких булов попала в интерфейс. А в С++ bool равен одному байту. И чтобы предотвратить возможные несовпадения в размерах интерфейса запилили абстрактный тип BOOL.

__________________
My Projects: download page

F.A.Q по XashNT
Блог разработчика в телеграме

Цитата:

C:\DOCUME~1\C4C5~1\LOCALS~1\Temp\a33328if(72) : see declaration of 'size_t'


Отправлено ONeiLL 03-05-2013 в 13:20:

Ясно, спасибо


Отправлено XaeroX 03-05-2013 в 13:36:

Цитата:
Дядя Миша писал:
А в С++ bool равен одному байту

Implementation-dependent.
В стандарте об этом ничего нет.
Цитата:
ONeiLL писал:
В чём профит от использования int вместо bool?

Ну, скажем, если TRUE равно 1, то оно везде равно 1.
А true (в с++) равно ~0, и его значение зависит от размера переменной в байтах (для int, например, это будет -1).
Ещё с интами можно эффективно производить битовые операции. При попытке кастов булов будет выводится знаменитое предупреждение C4800.

Добавлено 03-05-2013 в 20:36:

Вообще программисты, разрабатывающие низкоуровневый софт (в том числе игровой движок), очень не любят ненативные типы данных. А нативных - всего 4: int8, int16, int32 и float. Да на 64-битных архитектурах добавляется int64.

__________________

xaerox on Vivino


Отправлено Дядя Миша 03-05-2013 в 13:39:

Почему четыре? Еще дабл есть.

__________________
My Projects: download page

F.A.Q по XashNT
Блог разработчика в телеграме

Цитата:

C:\DOCUME~1\C4C5~1\LOCALS~1\Temp\a33328if(72) : see declaration of 'size_t'


Отправлено XaeroX 03-05-2013 в 14:02:

Дядя Миша
Есть и quadruple (регистры сопроцессора 128-битные), но в движках всё-таки обычно одинарную точность используют.

__________________

xaerox on Vivino


Отправлено ONeiLL 03-05-2013 в 14:12:

Из всего я юзаю:
int
float
bool
char

Цитата:
XaeroX писал:
При попытке кастов булов будет выводится знаменитое предупреждение C4800

C++ Source Code:
int a = 0;
bool b;
b = ( a != 0 );

Вот так норм?


Отправлено XaeroX 03-05-2013 в 14:38:

ONeiLL
Нет, не норм. Нельзя инты кастить в булы. Это переменные совершенно разных назначений.
Я ещё понимаю - std::vector<bool> для экономии памяти (там 1 бул занимает 1 бит), но обычно если есть нужда таких кастов - не проще ли везде инты юзать?

__________________

xaerox on Vivino


Отправлено Дядя Миша 03-05-2013 в 14:55:

Цитата:
XaeroX писал:
Есть и quadruple (регистры сопроцессора 128-битные)

Я помню. Но ЕМНИП, наружу нельзя получить число точнее 80 бит.

Добавлено 03-05-2013 в 18:55:

Цитата:
XaeroX писал:
Я ещё понимаю - std::vector<bool> для экономии памяти (там 1 бул занимает 1 бит)

Оно в экономию вылиывается, когда этих булов несколько тысяч, как виздата. А так их обычно на всё приложение штук 30-40.

__________________
My Projects: download page

F.A.Q по XashNT
Блог разработчика в телеграме

Цитата:

C:\DOCUME~1\C4C5~1\LOCALS~1\Temp\a33328if(72) : see declaration of 'size_t'


Отправлено KiQ 03-05-2013 в 14:58:

Я вот в последнее время в J2ME стал использовать byte вместо boolean, но это чисто для экономии памяти. ЕМНИП boolean в ней занимает в четыре раза больше места, так как в виртуальной машине интерпретируется как int

__________________
-Brain is dead-


Отправлено XaeroX 03-05-2013 в 15:07:

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

Ну да. Векторы обычно и используют, когда данных много.
Цитата:
Дядя Миша писал:
Но ЕМНИП, наружу нельзя получить число точнее 80 бит.

Почему нельзя? Можно. От языка зависит. Есть версии С/С++, которые поддерживают 128-битный тип long double.
Цитата:
KiQ писал:
стал использовать byte вместо boolean, но это чисто для экономии памяти

В 21 веке не память надо экономить, а процессорные такты. Современные процессоры эффективно работают с 32-битными целыми числами (а х64-процессоры - ещё и с 64-битными).

__________________

xaerox on Vivino


Отправлено Дядя Миша 03-05-2013 в 16:33:

Цитата:
XaeroX писал:
Современные процессоры эффективно работают с 32-битными целыми числами (а х64-процессоры - ещё и с 64-битными).

Кэээп?

__________________
My Projects: download page

F.A.Q по XashNT
Блог разработчика в телеграме

Цитата:

C:\DOCUME~1\C4C5~1\LOCALS~1\Temp\a33328if(72) : see declaration of 'size_t'


Отправлено XaeroX 03-05-2013 в 16:56:

Дядя Миша
Это надо повторять постоянно, в целях вакцинопрофилактики.

__________________

xaerox on Vivino


Временная зона GMT. Текущее время 08:42.
Показать все 13 сообщений этой темы на одной странице

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