memmove
和C++ 11 std::move
有何區別?我可以在重疊的內存位置使用std::move
嗎?哪種方法具有更高的速度性能?memmove和C++ 11 std :: move有什麼不同?
1
A
回答
3
幾個方法:
- 的std ::移動調用構造函數/析構函數,而的memmove沒有。因此,memmove不適用於非POD類型。
- std :: move將適用於任何C++容器類型,而memmove只適用於在連續內存位置線性存儲元素(如數組和std :: vector)的元素。
- std :: move不適用於重疊左側源範圍的目標範圍(對此使用move_backwards),而memmove適用於所有重疊範圍。
在將POD類型複製到右重疊範圍的情況下,很可能memmove和std :: move將具有相似的性能。在其他所有情況下,只有其中一種是合適的,所以你不能真正比較性能。
+1
相關問題
- 1. 爲什麼不std :: move在std :: unique_lock上有什麼作用?
- 2. -std = C++ 11和-std = gnu ++ 11之間有什麼區別?
- 3. std :: move和unique_ptr :: reset有什麼區別?
- 4. 使用move()代替std :: move()會有什麼缺陷嗎?
- 5. 爲什麼std :: move undefined,雖然編譯器用-std = C++ 11調用?
- 6. C++ 11:boost :: make_tuple與std :: make_tuple有什麼不同?
- 7. 爲什麼std :: stoi和std :: array不能用g ++ C++ 11編譯?
- 8. 爲什麼std :: move使用std :: remove_reference?
- 9. 爲什麼std :: move防止RVO?
- 10. move-semantics和std :: future
- 11. rvalue refs和std :: move
- 12. 爲什麼std :: move不能使用std :: list
- 13. 什麼是std :: move的類型?
- 14. C++ 11 std :: bind和boost :: bind
- 15. 爲什麼std :: vector和std :: array的C++ initializer_list行爲不同?
- 16. C++ std :: move在這裏不好?
- 17. std :: copy/memcpy/memmove優化
- 18. std :: move VS std ::轉發
- 19. std :: move into static_pointer_cast:爲什麼static_pointer_cast沒有右值引用超載?
- 20. std :: move和std :: copy是否一致?
- 21. 爲什麼copy elision不能使用std :: move?
- 22. C++ 11 std ::轉發指針
- 23. g ++爲什麼-ansi和-std = C++ 11衝突?
- 24. String沒有做什麼? C++ 11
- 25. 爲什麼在C++ 11標準庫中沒有std :: clear
- 26. 爲什麼C++ 11不支持'std :: function <void(int,...)>'?
- 27. 爲什麼C++ 11不會將lambdas轉換爲std :: function對象?
- 28. 爲什麼C++ 11 std :: array結構而不是類?
- 29. Qt:CONFIG + = C++ 11,但-std = C++ 0x
- 30. C++ 11返回一個std ::陣列具有不同尺寸
std :: move實際上並沒有移動任何東西,而memmove卻是。 std :: move只是創建一個可以從中移動的右值引用。 –
@Tom'std :: move'不會移動東西http://en.cppreference.com/w/cpp/algorithm/move,而'memmove'不會(它只是複製)! –
@ R.MartinhoFernandes我的壞,我雖然他指的是其他[std :: move](http://en.cppreference.com/w/cpp/utility/move) –