Тип, переводящий переменную из jBoolean в bool
При использовании JNI для взаимодействия между Java и C javah анализирует логическое значение в Java до jBoolean
в заголовочном файле JNI. Когда я использую bool
в файле C, компилятор Visual studio выдает предупреждение о том, что
warning C4800: 'jboolean': принудительное значение для bool 'true' или 'false' (предупреждение о производительности)
Есть ли какой-либо другой тип данных, который следует использовать? Или если bool
является единственным типом данных здесь, каковы именно проблемы с производительностью, с которыми я могу столкнуться?
Ответы
Ответ 1
"Проблема с производительностью" заключается в том, что литье не является полностью бесплатным. Отливка bool
по существу означает принудительное выполнение всех ненулевых значений до 1
, которое берет маленький бит кода, в отличие от "свободного" броска, такого как расширение char
до int
. "Проблема с производительностью" - это несколько дополнительных инструкций машины. Если вы делаете это миллион раз в трудном цикле, хорошо, может быть, вам все равно - иначе, нет, вам все равно. Это ИМО - глупое предупреждение компилятора; что небольшая добавленная стоимость - это просто часть компромисса, который вы используете при использовании bool
, и компилятор не должен беспокоить вас об этом.
Ответ 2
Попробуйте выполнить кастинг для BOOL. Вы также можете найти эту интересную тему: Разница между bool и BOOL.
Я не совсем уверен, что это то, что вы ищете. BOOL - 16 бит, а не 8 бит. Если это нормально, то это ближе к тому, что вы ищете, чем к bool. В противном случае вы можете использовать байт. Обратите внимание, что если вы закончите кастинг с любым из них, вы больше не сможете сделать == true. Это также объясняется в приведенной ссылке.