爲了決定在後C + 11x時代支持定製版本的交換是否合理,我想知道哪些std函數調用了交換,並且他們仍然會從用戶實現的版本中受益,即使存在移動構造函數和移動賦值?哪些std函數調用交換函數的用戶實現版本?
2
A
回答
2
我不認爲標準庫將調用您的交換功能,
標準庫將調用你的那些地方swap
實現它需要的類型是交換,例如在執行std::pair<>::swap
。除此之外,其他代碼也可能使用您的swap
來實現它們自己的swap
函數。對於這些情況,如果您已經實現了移動構造函數和移動賦值,則標準實現std::swap
應爲,但不要求(AFAIK)使用移動構造函數/賦值。
的swap
對於已經實現了移動操作的類型的實施是一個三線的功能,所以我會繼續前進,反正實現:
void swap(mytype& lhs, mytype& rhs) {
mytype tmp(std::move(lhs));
lhs = std::move(rhs);
rhs = std::move(tmp);
}
相關問題
- 1. 交換實現函數c
- 2. 實現'函數調用函數'
- 3. 如何使用std :: bind()調用基類的虛函數版本?
- 4. 用用戶實現的交換交換std :: functions
- 5. 確定哪些函數被調用
- 6. 函數版本的std :: bind()中的static_cast()
- 7. 實現用戶定義的malloc()函數?
- 8. C#調用本地C++所有函數:使用哪些類型?
- 9. 庫函數的新實現,並在該函數內調用舊實現
- 10. 用戶定義類的交換函數從未實例化過?
- 11. 哪些哈希函數相互正交?
- 12. 使用帶結果的異步版本實現函數
- 13. 前/後函數調用實現
- 14. 如何實現rundll2可調用函數?
- 15. std ::函數和錯誤:沒有匹配的函數調用
- 16. 如何替換的onclick函數調用我的函數調用
- 17. Matlab函數調用基本函數
- 18. 調用std :: bind(ed)和std :: ref參數的函數
- 19. 哪些版本的Windows知道API函數CopyFile2?
- 20. 調用PHP函數的函數調用
- 21. 堆棧函數的實現在哪裏?
- 22. 在std :: function中調用遞歸函數
- 23. Android ndk-r5調用std ::函數
- 24. std :: remove_if調用析構函數嗎?
- 25. 從std :: signal handler調用函數; SIGWINCH
- 26. 使用std :: function替換函數指針實現以在PlayFab SDK中使用lambdas
- 27. 這裏調用了哪個std :: string構造函數?
- 28. codeignitor - 哪些值引用實際文件以及哪些引用類/函數?
- 29. std ::線程調用模板函數出模板函數
- 30. std :: for_each()並調用構造函數/析構函數
你總是可以分析代碼,看看是否交換是一個熱點。 –
我認爲標準庫*要求的類型是可交換的(比標準庫的實現實際調用交換的地方更重要)。這可以通過搜索標準(或草稿)中的術語「可交換」來輕鬆找到。 – dyp