C++/CLI对象^%(插入符号百分号)声明是什么意思?

Pet*_*ert 18 c++-cli

这显然是一个谷歌证明的术语,因为我不能让任何搜索引擎不丢弃"额外"字符.我也在C++参考中查看了MSDN,但我似乎无法找到C++/CLI参考,因为声明部分中没有任何内容.

Han*_*ant 18

这意味着"通过引用传递":

 void bar::foo(Object^% arg) {
    arg = gcnew Object;    // Callers argument gets updated
 }
Run Code Online (Sandbox Code Playgroud)

C++中的相同之处:

 void foo(Object** arg) {
    *arg = new Object;
 }
Run Code Online (Sandbox Code Playgroud)

或C#:

 void foo(out object arg) {
     arg = new Object();
 }
Run Code Online (Sandbox Code Playgroud)

C++/CLI没有区分refout,它没有C#语言具有的明确赋值检查功能,因此无需区分这两者.在VB.NET中,ByRef与ByVal相同.


Blu*_*eft 15

%是一个跟踪参考.

它类似于本机reference(Object&),但跟踪引用可以引用CLR对象,而本机引用则不能.区别是必要的,因为垃圾收集器可以移动CLR对象,因此CLR对象的内存地址可能会发生变化.

^仅仅意味着它是管理.请参阅MSDN以及此SO帖子.


dan*_*n04 8

从本质上讲,它是在"管理"版本Object*&,并等同于refout在C#中的引用类型.