如何檢查C++類型是否可以複製?我有一個類,它使用具有指定模板類型T的memcpy和memcmp函數,並且我想爲類型啓用斷言,這對於使用memcpy複製是不安全的。有沒有辦法做到這一點(與現有的標準)?C++ is_trivially_copyable檢查
8
A
回答
8
不,在C++ 98/C++ 03中不可能。像這樣的事情是爲什麼<type_traits>
被添加到C++ 0x。 <type_traits>
中的一些功能可以在C++ 03中實現,通常使用SFINAE原則,但包括std::is_trivially_copyable<T>
在內的幾個功能只需要內置的編譯器支持。
4
最接近的是boost::is_pod<>。
6
在boost中有這種類型的特徵。
但是,如果類型是 trivially copyable,那麼您正在浪費時間 - memcpying類型不會比優化程序使用複製構造函數生成的速度更快。只需使用複製構造函數即可。
相關問題
- 1. is_trivially_copyable/constructible等支持鏗鏘++和g ++
- 2. is_trivially_copyable和is_trivially_copy_constructible有什麼區別?
- 3. 空檢查C + +
- 4. 檢查用C#
- 5. 檢查在C#
- 6. 檢查C
- 7. 檢查在C#
- 8. 檢查c庫
- 9. 檢查; get_model;檢查在Z3 C API
- 10. 檢查拼寫檢查程序C
- 11. C/LF條件檢查C
- 12. Autotools檢查C++ 11
- 13. C++檢查Windows 10
- 14. C#檢查元音
- 15. 檢查CRL OpenSSL C
- 16. 檢查點庫C#
- 17. C++程序檢查
- 18. 檢查宏在C++
- 19. c#ConsoleApp KeyPressed檢查
- 20. 檢查在C++ 11
- 21. SMTP Credentionals檢查(C#)
- 22. 檢查inf - objective c
- 23. c檢查整數
- 24. C#檢查區塊
- 25. C#平等檢查
- 26. 檢查,並在使用C#
- 27. 錯誤檢查文件c#
- 28. C#:檢查根節點
- 29. 模板類型檢查C++
- 30. 檢查空變量C#
您可能可以使用`is_pod`類型特徵。 「你可以安全地使用`memcpy`複製」的定義是什麼?如果一個對象有一個指向擁有動態分配對象的指針數據成員,那麼「安全地用`memcpy`複製」? – 2011-02-14 16:15:30
@James:定義是簡單的拷貝構造函數 - 也就是說,類型沒有用戶定義的拷貝構造函數,也沒有任何基類或數據成員。 – Puppy 2011-02-14 16:17:57
標準定義「一個可複製的類是一個類: - 沒有非平凡的複製構造函數(12.8), - 沒有非平凡的複製賦值運算符(13.5.3,12.8), - 具有微不足道的析構(12.4)「。 – axe 2011-02-14 16:20:14