2009-10-05 12 views
6

ブーストライブラリであり、今後のC++ 0x標準のように、さまざまなタイプの特性テンプレートを定義して、些細なコンストラクタ、コピーコンストラクタ、代入、またはデストラクタを持つオブジェクトと、 t。これの最も重要な用途の1つは、特定のタイプのアルゴリズムを最適化することです。 memcpyを使って。C++:has_trivial_X型の特性

しかし、私はさまざまなhas_trivial_Xテンプレート間の実際的な実際の違いを理解していません。 C++標準では、PODと非PODの2つのカテゴリに分類されます。タイプは、コンストラクタ、コピーコンストラクタ、代入演算子、またはデストラクタが定義されている場合、非PODです。言い換えれば、ビルトイン型でないものやビルトイン型のC-structは、PODではありません。

したがって、たとえばhas_trivial_assignとhas_trivial_constructorの区別は何ですか?オブジェクトに些細な代入演算子が含まれているか、または非自明のコンストラクタがある場合、それはPODではありません。だから、どのような状況下では、オブジェクトには些細な代入演算子があることを知ることは有益でしょうが、非自明のコンストラクタはありますか?

言い換えれば、単一の型特性テンプレートis_pod<T>を定義してそれを行うのはなぜですか?

答えて

6

C++ 0AではPOD型定義が緩やかになっています。

タイプは、非自明なコンストラクタを持つことができますが、簡単な代入演算子を持つことがあります。

など。

struct X 
{ 
    X() : y(-1) {} 
    X(int k, int v) : y(k * v) {} 

    int y; 
}; 

Xは「memcopy」である可能性がありますが、自明ではありません。

関連する問題