C 中引用傳遞可以實現雙向傳遞怎麼解釋?

時間 2021-06-08 09:14:33

1樓:

引用引數的實質就是在函式內部可以操作外部變數在實際開發中,非引用傳遞會造成拷貝構造消耗,因此會使用引用傳遞,但是又為了防止原變數被函式內部意外修改, 所以一般會使用const 引用,這是最常見的做法。

非const引用都預設了這個引用引數一定會在函式內部修改! 如果你不是有意這樣設計函式,請不用使用費const引用。

另外這樣設計看起來比較方便(相當於解決了C系只有單返回值的麻煩),但是用多了會造成除錯困難,函式變成非純的,追蹤變數的改變複雜到難以接受。

2樓:d41d8c

例如std::exchange(a, b),其功能是把b賦值給a,並返回a的原值。

int a = 1;

int prev = std::exchange(a, 2);

// a == 2; prev == 1

通過使用引用引數,std::exchange既可以讀取a的原值,又可以給a賦予新的值。所以是「雙向」的。

不過這種用法雖然有其使用場景,不像純粹的out引數那樣惡劣,但還是會影響可讀性,需要謹慎使用。

C 雙向引用編譯問題(C Primer中的乙個例子)?

你沒用模板,為什麼 實現 要在標頭檔案裡?如果你是指類的詳細定義在標頭檔案,那是當然的啊,有了詳細定義才能知道大小,才能知道開闢多少空間啊。至於改友元類,我平時就是這麼用的。我其實不太明白為什麼會有對其他類的方法設定友元的操作,按道理就應該是把自己暴露給另乙個類。另外我感覺設計上其實還有很多講究。比...

C 如何在類中定義乙個 C 函式(不用傳遞 this,非友元,非靜態)?

悽臨雨 無捕獲的lambda,可以轉型為c函式指標。類內巢狀類可以定義靜態函式 不一定合乎要求 但據我所知都只能獲取指標,沒辦法定義c函式 因為c函式應當處在c的命名空間中 陸海綿 使用函式指標成員指向乙個類外定義的C函式。extern c class Avoid p int 實在想不到哪種應用場景...

C 中函式的引數傳遞中暫存器的作用是什麼?

Sting 暫存器的作用跟函式的呼叫約定有關,而呼叫約定又跟編譯器有關,c 標準沒有這方面的規定。以vc來說,大致有這麼幾種 cdecl,stdcall,fastcall,thiscall,vectorcall。呼叫約定規定了引數如何傳遞 通過暫存器還是棧,左到右還是右到左進棧 值如何返回,呼叫方還...