c move函式到底是什麼意思?

時間 2021-05-06 02:42:37

1樓:flink

搞的那麼複雜,就是move字面意思,把記憶體一塊東西move到另一塊,比如說你想push_back乙個string,你最想編譯器做的就是把string這塊記憶體轉移到vector裡面,但是沒有右值引用編譯器大概率複製了乙份string放在vector裡面。move就是為了防止這種拷貝。

2樓:

人家問move的含義,你們一群人答非所問說啥移動構造。

正解:std::move是乙個函式(函式模板),作用是將傳入引數強制轉換成右值。來

3樓:鉛筆

首先移動賦值/建構函式能夠減少記憶體的拷貝,移動的是物件持有的記憶體(比如智慧型指標這種典型的用物件管理記憶體的模式),而不是物件本身,而且移動的過程需要你自己實現(這點很重要!!!)。但是要求作用在右值引用,大部分是臨時物件上面。

但是如果有個物件不是右值,你又想用移動語義怎麼辦呢?你就可以move一下。。。。

自我感覺c++為了彌補設計上的缺陷,就不斷的搞出一些trick。。到後來越來越亂。。總之早棄早好(逃)

4樓:

建議去看看effective modern C++的條款23,看完就都明白了。

另,在網上找到乙份中文翻譯的版本,參見:item 23: 理解std::move和std::forward

5樓:

上面有人詳細解答了, 我就簡短的點名一下std::move函式的本質吧.

move的本質就是幫助編譯器選擇過載函式, 告訴編譯器"請盡量把此引數當做右值來處理"

6樓:lotuswhl

補充一點:使用std::move僅僅只是將傳入的物件或其引用轉為右值引用&&,但是請注意,如果傳入的是const修飾的物件或引用,便會轉為const&&,此時便會因為因為常量的不可變性而並不能移動!

變相呼叫拷貝成員!本質上,看看移動成員的引數簽名便知:都是非const的,而拷貝成員都是接受const引數的!

(再多說一點眾所周知的東西,拷貝成員是可以接受任意型別的引數的,包括右值!當傳入右值時C++會選擇呼叫移動成員,如果提供的話,因為他們更加匹配!)

7樓:Cyandev

move 的意義就是把有名變數(lvalue)變成無名的右值引用,因為不管你是不是寫 string&& bar = foo(),bar 就是有名的,就是個左值,把它作為引數繼續傳遞也是左值,但是使用 move 之後就變成右值了。

至於 move 怎麼實現的,超簡單,自己 cmd 點一下看看就明白了。

線性到底是什麼意思?

gopep9 個人理解是線性方程其實可以理解為對乙個函式求導或者求偏導 假如有多個x 導數不隨函式輸入x的當前值 所在位置 而變化。非線性方程的就是導數和x位置有關的方程。 shzj kl 已有回答已經很清楚地回答了線性,重點理清一下函式和方程的概念。對於 f x kx b 通常稱為一次函式 可以有...

和光同塵到底是什麼意思?

青雲散人 和其光,言雖有獨見之明,當如闇昧,不當以曜亂人也。道德真經注 河上公 可參見 道德經集釋 中國書店 道德真經注 四 河上公 無源第四 道衝而用之,衝,中也。道匿名藏譽,其用在中。或不盈。或,常也。道常謙虛不盈滿。淵兮似萬物之宗。道淵深不可知也,似為萬物之宗祖。挫其銳,銳,進也。人欲銳情進取...

道德到底是什麼意思?

friend 1.適用於人 2.存在觀察者和被觀察行為 3.通過觀察者的集體有利意識對被觀察行為進行判斷集體有利意識就是如果大家都這麼幹那麼對於整個集體來說是有利的每個人的集體有利意識大部分相同 可以理解為客觀集體有利,我理解為我們基因記住的東西,比如互相幫助屬於客觀集體有利,因為大多數不互相幫助的...