簡體   English   中英

is_trivially_copyable和is_trivially_copy_constructible有什么區別?

[英]What is the difference between is_trivially_copyable and is_trivially_copy_constructible?

什么時候會給出不同的答案,這種差異什么時候會有用呢?

前者測試了一個簡單的可復制屬性,用少數幾個詞來表示類型是memcpy -safe。

一個簡單的可復制類是一個類:

- 沒有非平凡的拷貝構造函數(12.8),

- 沒有非平凡的移動構造函數(12.8),

- 沒有非平凡的副本賦值運算符(13.5.3,12.8),

- 沒有非平凡的移動賦值運算符(13.5.3,12.8),和

- 有一個簡單的析構函數(12.4)。

一個普通的類是一個具有普通默認構造函數(12.1)並且可以輕易復制的類。

[ 注意:特別是,一個簡單的可復制或普通的類沒有虛函數或虛基類。 - 尾注 ]

后者測試是否存在一個普通的拷貝構造函數 ,順便說一句,這是一個簡單的可復制屬性的要求。 它基本上意味着該類型的復制構造函數執行按位復制。

如果不是用戶提供的,則類X的復制/移動構造函數是微不足道的

- 類X沒有虛函數(10.3),沒有虛基類(10.1),和

- 選擇復制/移動每個直接基類子對象的構造函數是微不足道的,並且

- 對於類類型(或其數組)的X的每個非靜態數據成員,選擇復制/移動該成員的構造函數是微不足道的;

否則復制/移動構造函數是非平凡的。

很容易制作一種為這些特征提供不同結果的類型:

struct foo {
    foo(foo const&) = default; // this is a trivial copy constructor
    ~foo(); // this is a non-trivial destructor
};

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM