2011-02-18 49 views
16

這顯然是一個谷歌證明術語,因爲我不能讓任何搜索引擎不扔掉「額外」字符。我也在C++參考中看過MSDN,但是我似乎找不到C++/CLI參考,因爲它的聲明部分沒有任何內容。C++/CLI對象^%(caret percent-sign)聲明是什麼意思?

+2

MSDN:http://msdn.microsoft.com/en-us/library/8903062a%28VS.80 %29.aspx另請參閱:http://stackoverflow.com/questions/202463/what-does-the-caret-mean-in-c-cli – 2011-02-18 00:35:27

回答

10

%tracking reference

它與原生參考(Object&)類似,但跟蹤參考可以引用CLR對象,而原生參考不能。區別是必要的,因爲垃圾收集器可以移動CLR對象,所以CLR對象的內存地址可能會改變。

^只是表示它被管理。見MSDNthis SO post

7

實質上,它是Object*&的「受管理」版本,相當於refout對於C#中的引用類型。

15

意指 「按引用傳遞」:在C++

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

同樣的事情:

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

或C#:

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

C++/CLI不區分參考列出,它沒有t有明確的賦值檢查功能,因此C#語言不需要區分這兩者。在VB.NET中,ByRef vs ByVal也一樣。

3

這是一個引用的託管指針。所以,如果你有這樣的事情:在C#

void DoSomething(System::String^% stringObject) 

它會是什麼樣子:

void DoSomething(ref System.String stringObject) 
相關問題