带或不带括号的 JNIEnv 用法
JNIEnv usage with or without parenthasis?
我很好奇为什么jni编程指南说
JNI为C++程序员提供了一个稍微干净的界面。这
jni.h
文件包含一组内联C++函数,以便本机 方法程序员可以简单地编写:jclass cls = env->FindClass("java/lang/String");
而不是:
jclass cls = (*env)->FindClass(env, "java/lang/String");
env
上的额外间接级别和env
参数FindClass
对程序员是隐藏的。C++编译器简单 将 C++ 成员函数调用扩展到其 C 对应项; 因此,生成的代码完全相同。
C 和 C++ 指针有什么区别?
C++
指针是指向类object
的指针。C
指针是指向function
的指针。它们是两回事。
因为C++ object
已经知道环境,所以你不需要再次传递环境。
C
指针是指向结构的指针,在该结构中调用函数。该函数没有状态,因此您需要传递状态(在本例中为相同的env
结构体,以便它可以在此结构中找到变量。
在JDK
jni.h
中,您会看到C++
函数为:
jclass FindClass(const char *name) {
return functions->FindClass(this, name);
}
该functions
是对象内部指向env
的指针。因此,C++
版本在内部扩展到C
版本。
相关文章:
- 这个指针在c++中的用法
- 当C++中需要自动删除时,这是静态的正确用法吗?
- libstdc++ 文件系统中未初始化的用法?
- 复制和交换习惯用法与移动操作之间的交互
- 类作用域的类型别名"using":[何时]方法中的用法可以先于类型别名?
- 命名参数习惯用法和(抽象)基类
- 省略号在C++中的所有用法
- () 在 C++ 11 中的特殊而奇怪的用法?
- 构造函数的用法
- 模板类中自动的类用法不完整
- 这里的 = 运算符有什么用法?
- 什么模板用法在阶乘中更好
- 如果可变长度元素的constexpr用法得到<>
- 为什么 setjmp/longjmp 的这种用法是未定义的行为?
- 访问提升:shared_ptr 主范围外崩溃,断言失败:px != 0.指针的正确用法是什么?
- C++ 中函数中 Const 用法之间的差异
- equal_to模板类C++用法
- PCL 中的 GICP 用法
- 向量的正确用法<int>::size_type
- 带或不带括号的 JNIEnv 用法