这显然是一个支持Google的术语,因为我无法让任何搜索引擎不丢弃“额外”字符。我也在C ++参考中查看MSDN,但我似乎无法找到C ++ / CLI参考,因为声明部分中没有任何内容。
答案 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)
它类似于本机引用(Object&
),但跟踪引用可以引用CLR对象,而本机引用则不能。区别是必要的,因为垃圾收集器可以移动CLR对象,因此CLR对象的内存地址可能会发生变化。
^
只是意味着它是受管理的。请参阅MSDN和this SO post。
答案 2 :(得分:8)
基本上,它是Object*&
的“托管”版本,相当于C#中引用类型的ref
或out
。
答案 3 :(得分:3)
这是一个通过引用的托管指针。所以,如果你有类似的东西:
void DoSomething(System::String^% stringObject)
在C#中,它看起来像是:
void DoSomething(ref System.String stringObject)
答案 4 :(得分:0)
这是C++/CLI Tracking Reference。这有点像C ++引用,但对于托管对象。