![](/img/trans.png)
[英]What is the difference between is_trivially_copyable and is_trivially_copy_constructible?
[英]is_trivially_copyable behaves differently between the constructor I implemented and the default
有 std::is_trivially_copyable https://en.cppreference.com/w/cpp/types/is_trivially_copyable的演示代碼
void test()
{
struct A {
int m;
A(const A& o):m(o.m){}
};
struct D {
int m;
D(D const&) = default; // -> trivially copyable
D(int x) : m(x + 1) {}
};
std::cout << std::is_trivially_copyable<A>::value << '\n';
std::cout << std::is_trivially_copyable<D>::value << '\n';
}
A 不可復制,D 可以。 我用默認行為實現了 A 的復制構造函數。 是什么導致了差異?
這是在 c++ 中定義的方式: https://en.cppreference.com/w/cpp/language/copy_constructor#Trivial_copy_constructor
平凡的復制構造函數 如果滿足以下所有條件,則 class T 的復制構造函數是平凡的:
非聯合 class 的普通復制構造函數有效地復制參數的每個標量子對象(包括遞歸地,子對象的子對象等)並且不執行其他操作。 但是,不需要復制填充字節,即使復制的子對象的 object 表示也不必相同,只要它們的值相同即可。
TriviallyCopyable 對象可以通過手動復制它們的 object 表示來復制,例如使用 std::memmove。 與 C 語言(POD 類型)兼容的所有數據類型均可輕松復制。
這不是微不足道的,因為它是用戶定義的。 這就是規則。
編譯器不需要確定您的代碼是否與生成的代碼相同。 你的工作就是弄清楚。 :-)
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.