最近新出的C++右值引用的意思

來源:互聯網
上載者:User

看了一下這種方法的介紹,個人感覺,右值引用,更像人類的思想了,有些將編譯前與編譯後結合緊密的感覺。
左值引用是變數名的別名,右值引用是值的別名,也就是不將值賦給一個變數名所在的地址,直接將值所在的初始的地址位置,轉給右值引用變數名。
這個好比是這樣,一個人來圖書館送書,管理員沒有將書送到指定的書架,而是在送書地點,直接將書架,架起來,包住這本書。這樣的好處,我想只有一點,就是在編譯時間,節約記憶體佔用,而在編譯後的代碼中,右值引用變數所在的代碼位置上,是立即數,而不是寄存器或是地址值,從而加快了運行速度。
以上全是個人理解。
為什麼要用兩個&,我現在不清楚,或許是只是為了分清這個操作。
主要是對於編譯後,實現了一種指定地區內的,編譯後的,類似於宏值功能的inline類立即數功能。也就是將值從調用值轉為立即數,加快執行速度。
可以說是用空間換時間的方法,尢其是引用右值是字串的話,最為名顯。
比如,我做個假設,我現在也沒用這種編譯方法,在一個函數中引入右值參數一個,而引入的實參是一個變數名a,形參是b,當在函數中改寫b=10時,a以前如果是20,那這個a=20還是20,不會變成10,而函數中的b引用右值a,改寫成10後,再操作就是b=10,不知是不是這樣。有時間我再測試。 (這個可能有點亂)
不過這些可能有錯,右值引用,用的是最初那個值的地址,反正,後面我說的有點亂,請海涵。
&&又看了一下,右值引用,主要就是對指標的調度,變數名會被毀掉,但記憶體中的資料不變,保留下來,這樣就減少局部變數的複製次數,減少程式的無用操作。
也就是讓程式中的資料操作更靈活,不用為了沒必要的記憶體複製而做任何多餘的cpu操作。
說白了吧,就是函數裡定義的變數,在函數退出後,並不會被毀掉,還存在記憶體中被右值引用調用它們的地址,操作資料。
現在的程式設計語言越來越靈活了,這樣一來,就更像人的思想了,編譯前可以更完美的控制編譯後的程式執行操作資料過程,減少無用的操作。
哈,這樣一來,java和c#怕是需要大量的改版了,不然速度明顯落後C++對機器碼的編排靈活性了。
如果用這種方法寫出來的作業系統和應用程式,效能提高不是一點的問題,而且程式架構也會大大的進化。
右值引用的出現,對於全域變數的使用,又是一個不小的衝擊。可以減少全域變數的使用。
而且,如果以後還有進步的話,全域變數的定義可能會成為曆史。
變數的使用會更加的自由,全域變數可能會減少所有不應屬於它的工作。
C++進化了多少年,才進化出現在這點,對機器碼編排的靈活性,又進了一小步。這也說明,這個功能雖然簡單,但是實現的時間是很慢的,幾年,幾十年,也不一定能實現多少。所以,我更認為我的編程能力,並不差。

其實,等到N年之後,C++或是C++++。。。。。。進化到一定的靈活性後,可能我們那時想想,這是多麼的容易,不就是對機器碼的編排靈活性麼,為什麼需要這麼多年才能懂得,其實,這就像是現在的我,知道宇宙的一切,但連工作也沒有的道理吧。


&&指明是右值引用,我認為,是這樣,&變數名 表明這是一個變數名的地址,而&&變數名,表明這是一個變數名的地址的引用,也就是說這個引用,引用了這個變數名所對應的左值的地址的引用。

(圖裡不是左值,是右值,我打錯字了。)


左值引用:左面固定變數名的別名。
右值引用:右面臨時值所在的記憶體位址的別名。

int b=20;

int &a=b;

int &&c=10;

一個是固定值的別名,一個是臨時值的別名。 

由C++11標準右值引用,看到C++的未來設計路線

1。C++將會出現,操作臨時值的地址功能。
2。C++將會出現,操作臨時值,並根據臨時值的地址來將臨時值,起一個固定的變數名的功能。
3。C++將會出現,將臨時值,進行資料結構定義的功能。
4。C++將會出現,將臨時值,進行常數或類類型定義等的功能。

5。C++將會出現對臨時函數指標右值引用,並實現函數的定義的右值引用,實現程式編寫程式的功能。
6。C++將會出現對程式入口函數的右值引用定義,實現主程式的改變。
7。C++將會出現對右值引用的右值引用定義,實現程式自己產生創造性的能力。(右值引用,可以被右值引用一個變數,用來自由右值引用。)

從新的右值引用可以看到,這些功能都將會是C++標準的發展方向,這將對機器碼的編排更加的靈活,對編譯後的資料調度更加的靈活。


這將實現動態建立變數的功能。
未來電腦語言會向著更加智能的方向發展,電腦自己可以編寫面向對像的程式將會慢慢實現。
現在這個發展方向將會產生電腦自己產生常量變數的能力。


未來人類的世界是好是壞,我們無從得之,但這個結果的發展是顯而易見的了。

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.