Тип приведение переменной от jBoolean к bool - PullRequest
11 голосов
/ 13 июня 2011

При использовании JNI для взаимодействия между Java и C javah анализирует логическое значение в Java до jBoolean в заголовочном файле JNI. Когда я использую bool в файле C, компилятор Visual Studio выдает предупреждение, что

предупреждение C4800: 'jboolean': принудительное значение bool 'true' или 'false' (предупреждение о производительности)

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

Ответы [ 2 ]

11 голосов
/ 13 июня 2011

«Проблема производительности» заключается в том, что приведение не является полностью бесплатным.Приведение к bool по сути означает приведение всех ненулевых значений к 1, что требует небольшого количества кода, в отличие от "свободного" приведения типа расширения char до int.«Проблема производительности» - это несколько дополнительных машинных инструкций.Если вы делаете это миллион раз по кругу, хорошо, может быть, вам все равно - иначе нет, вам все равно.Это IMO - глупое предупреждение компилятора;эта небольшая добавленная стоимость является просто частью компромисса, который вы делаете при использовании bool, и компилятор не должен вас беспокоить.

3 голосов
/ 13 июня 2011

Попробуйте привести к BOOL вместо этого. Вы также можете найти эту тему интересной: Разница между bool и BOOL .

Однако я не совсем уверен, что это то, что вы ищете. BOOL 16 бит, а не 8 бит. Если это хорошо, то это ближе к тому, что вы ищете, чем bool. В противном случае вы можете использовать байт. Обратите внимание, что если вы в конечном итоге разыграете что-либо из этого, вы не сможете больше == true Это также объясняется в приведенной мной ссылке.

...