c 為什麼要搞個引用岀來,特別是右值引用,感覺破壞了語法的簡潔和條理,拷貝乙個指標不是很好嗎?

時間 2021-06-12 20:47:39

1樓:王旭競

一、這樣說吧。對於已存在的物理資源來說,只有兩個狀態:可變、不可變。

對於使用者來說,需要給物理資源命名,才能使用。對於名來說,有兩個狀態:有(資源)、無(資源)。

所以綜合起來,對於給物理資源命名這件事,需要三個語意來操作:別名(二者唯一)、複製(二者各一)、移動(一有一無)。

二、邏輯上來說,別名、複製、移動這三個已經足夠命名所有的資源了。

別名對應引用,複製對應資源賦值,移動對應資源轉移。日常使用已經夠了。但這裡有乙個缺失,缺失的這個概念問題,出在效能優化上。

我們發現有一些資源,它們的複製和別名的實際效果可以是一致的。諸如字面量(不可變)、常量(不可變)、將亡值(不再變)。這些值,編譯器可以自動處理一部分,但有時候很難自動判斷,所以給新增了一套右值和右值引用的概念。

「無名天地之始,有名萬物之母。故常無慾以觀其妙,常有欲以觀其徼。此兩者同出而異名,同謂之玄。玄之又玄,眾妙之門」。

2樓:NaN

指標是引用但是引用不一定是指標。引用可以通過指標在執行時實現,但引用同樣也可以被編譯器在編譯時實現,這就為編譯器優化提供了更大的空間,比如函式內聯優化時,編譯器可以直接將引用看作別名而保持函式語義不變,但指標不行。

真要說應該刪掉誰,那麼絕對應該是指標,而不是引用。

3樓:爬樹賊溜的小松鼠

補充一下對右值引用的理解:

右值引用是為了引用快要被銷毀的值,這樣就可以避免拷貝,從而提高效能和增加應用場景。右值的理解要結合move,具體請看C++的move是什麼:https://

zhuanlan /p/374392832

C 輸出運算子過載,為什麼要返回引用才能實現連續輸出?返回物件不可以實現連續輸出嗎?

石大頭 其他答主說得很好了。題主應該更進一步體會值語義和物件語義的區別,物件語義天生是不支援拷貝的。比如說Person laowang laowang 拷貝一下難道代表有兩個老王嗎 回答最長的那個我覺得太複雜了。為什麼要返回引用其實很簡單,輸出運算子 是乙個運算子,跟算術運算子 一樣,有著相應的規則...

C 中的 this 為什麼是指標而不是引用?

中二青年 這個是c 作者的個人主頁,可以看一下答案,裡面還回答了,為什麼引入ref的原因。Why is this not a reference?Because this was introduced into C really into C with Classes before referenc...

為什麼有人要搞Vtuber?

不請自來?其實最近才知道這類事情的 主要是虛擬主播本身是乙個新興行業,在國內更是乙個如同新鮮事物一樣的存在 而作為新鮮事物,一旦有了較快的發展,就會對其它的造成影響。其實別說 虛擬主播 就比如說 沒記錯的話縫紉機在剛剛被發明的時候就被裁縫所抵制,認為一旦投產就等於搶了裁縫們的飯碗。一些新興的發明,一...