让我们说我在Java中有一个GUI,通过JNI调用一些C ++代码。
对于Float和Double,Java有负无穷大,NaN等的硬定义值(例如参见http://docs.oracle.com/javase/6/docs/api/java/lang/Float.html#NEGATIVE_INFINITY)。在C ++上,这取决于平台,我们可以使用std :: numeric_limits访问实际值。
现在让我们说下面的伪代码是jni调用:
float NIFloat { return -std::numeric_limits<float>::infinity();}
double NIDouble { return -std::numeric_limits<double>::infinity();}
此代码可以在多个平台上运行吗?即,在Java中,以下评估为true:
Float.NEGATIVE_INFINITY == NIFloat();
Double.NEGATIVE_INFINITY == NIDouble();
在以下情况中会发生什么:
double NILongD {-std::numeric_limits<long double>::infinity();}
这会被翻译成Java Double.NEGATIVE_INFINITY
吗?
如果这不是跨平台的,那么跨JNI是否有跨平台安全的方式来传达这些价值?