解开一些JNIC++;来自Android内核的代码 我对C++和JNI的经验不太多,所以我对这个代码的某些部分(这是Android框架的一部分)有很大的麻烦,更确切地说是来自代码“表面> 类的CPP源: static void Surface\u解锁canvasandpost( JNIEnv*env,jobject clazz,jobject argCanvas) { jobject canvas=env->GetObjectField(clazz,so.canvas); if(canvas!=argCanvas){ doThrow(env,“java/lang/IllegalArgumentException”,NULL); 返回; } const sp&surface(getSurface(env,clazz)); 如果(!Surface::isValid(曲面)) 返回; //将画布与曲面分离 SkCanvas*nativeCanvas= (SkCanvas*)env->GetIntField(canvas,no.native_canvas); int saveCount=env->GetIntField(clazz,so.saveCount); nativeCanvas->restoreToCount(存储计数); nativeCanvas->setBitmapDevice(SkBitmap()); env->SetIntField(clazz,so.saveCount,0); //解锁曲面 status_t err=surface->unlockAndPost(); 如果(误差

解开一些JNIC++;来自Android内核的代码 我对C++和JNI的经验不太多,所以我对这个代码的某些部分(这是Android框架的一部分)有很大的麻烦,更确切地说是来自代码“表面> 类的CPP源: static void Surface\u解锁canvasandpost( JNIEnv*env,jobject clazz,jobject argCanvas) { jobject canvas=env->GetObjectField(clazz,so.canvas); if(canvas!=argCanvas){ doThrow(env,“java/lang/IllegalArgumentException”,NULL); 返回; } const sp&surface(getSurface(env,clazz)); 如果(!Surface::isValid(曲面)) 返回; //将画布与曲面分离 SkCanvas*nativeCanvas= (SkCanvas*)env->GetIntField(canvas,no.native_canvas); int saveCount=env->GetIntField(clazz,so.saveCount); nativeCanvas->restoreToCount(存储计数); nativeCanvas->setBitmapDevice(SkBitmap()); env->SetIntField(clazz,so.saveCount,0); //解锁曲面 status_t err=surface->unlockAndPost(); 如果(误差,android,c++,java-native-interface,Android,C++,Java Native Interface,尤其令我困扰的是: const sp<Surface>& surface(getSurface(env, clazz)); const sp&surface(getSurface(env,clazz)); 这让我很困惑。没有等号,而且这些模板使它更难理解 有人能帮我弄清楚这一行代码吗?这是一个参考的构造函数调用语法-这样写有点混乱,比如写inti(23)而不是inti=23,但它实际上相当于编写 const sp&surface=getSurface(env,clazz)

尤其令我困扰的是:

const sp<Surface>& surface(getSurface(env, clazz));
const sp&surface(getSurface(env,clazz));
这让我很困惑。没有等号,而且这些模板使它更难理解


有人能帮我弄清楚这一行代码吗?

这是一个参考的构造函数调用语法-这样写有点混乱,比如写
inti(23)而不是
inti=23,但它实际上相当于编写

const sp&surface=getSurface(env,clazz)

太棒了。谢谢!尽管如此,它在语法上还是比我强。好吧,它对于具有值类型的语言来说是有意义的,编写
myobjecti(“foo”)而不是
MyObject i=MyObject(“foo”)。您知道这种符号是否有名称,因为它在核心cpp文件中无处不在。对于java DeV来说,这确实令人不安。你知道这种语法在C++?alAlBUS中是否有效:它是无效的。C是在C++中引入的,因为它是初始化需要构造函数参数的值类型的最干净的方式。语法实际上没有特殊的名称,可能是构造函数调用语法或是什么,它是非常基础的C++。
const sp<Surface>& surface(getSurface(env, clazz));