std::sort
を使用して要素を交換します。これによりstd::swap
、コピー コンストラクターと代入演算子が使用され、値を交換するときに正しいセマンティクスが得られることが保証されます。
qsort
スワップする型に関連付けられたセマンティクスを無視して、要素の基になるビットを単純にスワップすることによって要素をスワップします。
qsort
ソートしている型のセマンティクスを知らなくても、自明でない型では非常にうまく機能します。私が間違っていなければ、POD タイプではないにもかかわらず、すべての標準コンテナーで動作します。
qsort
型で正しく動作するための前提条件T
は、T
/自明に可動/であることだと思います。頭のてっぺんから離れて、自明に移動できない唯一の型は、内部ポインターを持つ型です。例えば:
struct NotTriviallyMovable
{
NotTriviallyMovable() : m_someElement(&m_array[5]) {}
int m_array[10];
int* m_someElement;
};
の配列をソートするとNotTriviallyMovable
、m_someElement
s は間違った要素を指すことになります。
私の質問は次のとおりです。他の種類のタイプでは機能しませんqsort
か?