问题 键入从jBoolean到bool的变量


当使用JNI在Java和C之间进行接口时,javah将Java中的布尔值解析为 jBoolean 在JNI头文件中。我用的时候 bool 在C文件中,Visual Studio编译器会发出警告

警告C4800:'jboolean':强制值为bool'true'或'false'(性能警告)

是否应该使用其他任何数据类型?或者如果 bool 这是唯一的数据类型,我可能遇到的性能问题究竟是什么?


1789
2018-06-13 04:37


起源



答案:


“性能问题”是演员阵容不是完全免费的。投射到 bool 本质上意味着强制所有非零值 1这需要一点点代码,而不是像“扩展”那样的“免费”演员 char 至 int。 “性能问题”是一些额外的机器指令。如果你在一个紧密的循环中这样做了一百万次,好的,也许你在乎 - 否则,不,你根本不应该在意。这是IMO一个愚蠢的编译器警告;增加的小成本只是您在使用时所做出的妥协的一部分 bool 并且编译器不应该打扰你。


11
2018-06-13 12:03





尝试转换为BOOL。您可能会发现此主题也很有趣: bool和BOOL之间的区别

我不太确定这是你在找什么。 BOOL是16位,而不是8位。如果可以,那么它比你所寻找的更接近于布尔。否则你可以使用byte。请注意,如果你最终投射到任何这些,你将无法做到 ==是的 了。我在提供的链接中也对此进行了解释。


3
2018-06-13 11:56