最近在搞c++/cli,發現經常需要涉及ref和out的使用,因此記錄下。
c++/cli 是一種.net語言,因此其可以像c#一樣使用ref和out為函式引數進行標識。
首先我們看看ref,這個是表示對物件的位址進行傳遞,所以很簡單傳遞乙個位址符號即可
我們將這個方法引用到乙個c#專案中,可以看到vs幫我們加上了ref關鍵字
首先我們需要知道的是,clr層面是沒有out這個用法的,他的本質還是ref,只是對於c#等編譯器來說,將其設定為out。
所以回到c++/cli只需要在原來的方法中新增乙個[ runtime::interopservices::out ]attribute即可(注意大小寫,這裡編譯器不會提醒,別問我怎麼知道的,都是淚)
看變成out了
此外需要注意的一點,如果你的ref或者out引數是由外部方法的引數傳入的,需要確保整條鏈路上的ref或者out一致,否則會出現編譯錯誤
.net - ref and out in c++/cli - stack overflow
how to: specify an out parameter - microsoft docs
本文會經常更新,請閱讀個人部落格原文: ,以避免陳舊錯誤知識的誤導,同時有更好的閱讀體驗。
ref和out的使用
c 程式設計師參考 ref c 參考 ref 關鍵字使引數按引用傳遞。其效果是,當控制權傳遞 用方法時,在方法中對引數所做的任何更改都將反映在該變數中。若要使用 ref 引數,則方法定義和呼叫方法都必須顯式使用 ref 關鍵字。例如 class refexample static void main...
使用ref和out引數
ref型別引數側重修改,out型別引數側重輸出 ref在傳入值之前必須先初始化 out在函式內,函式結束之前,即傳出值之前初始化.eg protected void page load object sender,eventargs e int indexref 1 testref ref inde...
使用ref和out引數
通過ref和out關鍵字,可以以引用的方式傳遞任何型別的值。這樣做,將允許改變呼叫過程中使用的實參值。在研究ref和out的機制之前,首先有必要理解為什麼需要以引用方式來傳遞值型別。通常有兩個原因 使方法能改變其實參的值或者允許方法有多個返回值。ref引數修飾符使得c 可以建立按引用呼叫,而不是按值...