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

时间:2011-02-18 00:33:22

标签: c++-cli

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

5 个答案:

答案 0 :(得分:17)

这意味着“通过引用传递”:

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

C ++中的相同内容:

 void foo(Object** arg) {
    *arg = new Object;
 }

或C#:

 void foo(out object arg) {
     arg = new Object();
 }

C ++ / CLI不区分 ref out ,它没有C#语言具有的明确赋值检查功能所以不需要区分这两者。在VB.NET中,ByRef与ByVal相同。

答案 1 :(得分:15)

%tracking reference

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

^只是意味着它是受管理的。请参阅MSDNthis SO post

答案 2 :(得分:8)

基本上,它是Object*&的“托管”版本,相当于C#中引用类型的refout

答案 3 :(得分:3)

这是一个通过引用的托管指针。所以,如果你有类似的东西:

void DoSomething(System::String^% stringObject)
在C#中,它看起来像是:

void DoSomething(ref System.String stringObject)

答案 4 :(得分:0)

这是C++/CLI Tracking Reference。这有点像C ++引用,但对于托管对象。