1樓:槓吐血評論員陶某
move應該是針對你的物件中有在堆上分配記憶體這種情況而設定的,你舉的例子恰好不符合這種情況。看下面這個例子:
classA~
A()A(
A&&other)A
&operator=(
A&&other
)return
*this;}
int*p;
};int
main
A中有堆上分配的變數p時,呼叫move語義相關函式,只拷貝指標內容,不拷貝指標指向的記憶體的內容,
2樓:
對於不可避免物件複製的場合,move和copy沒有區別,你舉的例子就屬於這種情況。
對於大部分stl容器,move可以避免容器內部物件的複製,這時move相對於copy就有優勢了。
對move進行更深入的了解,推薦你讀一下中的Item29 "Assume that move operations are not present, not cheap, and not used."以及Item23 "Understand std::move and std::
forward."
C 11 的move語義,從語言功能正交性來看,是一種必須的語義嗎?
圓形畢露 Move語意不是必須的,它的作用是為了提高程式效率。Move語意和右值有關,在C 11中,編譯器能夠根據函式引數是左值還是右值決定呼叫copy constructor還是move constructor。右值從狹義上說就是沒有identity的表示式,比如匿名物件,通過隱式轉換的物件.這些...
c 11中 auto 定義的引用為什麼不能繫結字面值?
劉雲賓 編譯器認為,8 的型別是 int 因為非類非陣列的純右值沒有 CV 屬性 所以,它會推導為 int ay 8 這顯然是錯誤的。非類非陣列的純右值不能有cv 限定。注意 函式呼叫或轉型表示式可能生成非類的 cv 限定型別的純右值,但其 cv 限定符被立即剝除。值類別 cppreference....
在C 11中,auto關鍵字的大量使用,會影響編譯速度嗎?
原子筆 沒有測試就別隨便下結論或者杞人憂天吧。編譯器在處理XX a b時,不管XX是auto還是非auto 一樣要去檢視b的型別的,並且需要確認可以拷貝構造。所以理論上來講只會減少編譯時間,包括非自定義型別也類似。 Premature optimization is the root of all ...