Xor演算を使用して効果的なスワップ関数を実装できることを学びました。このような:
template<class T>
void swap(T& a, T& b)
{
a = a^b;
b = a^b;
a = a^b;
}
しかし、インターネット上で見つけることができるすべてのスワップの実装は、基本的に次のようになります。
template<class T>
void swap(T& a, T& b)
{
T temp(a);
a = b;
b = temp;
}
VC ++ 2010でテストしたため、コンパイラは上記の2つの形式に対して同じコードを生成しなかったようです。最初のコードは、よりも速く実行されstd::swap
ます。最初のものにポータブルまたは他の問題がありますか?私は英語を母国語とせず、C ++が苦手なので、間違いを訂正してください。
(編集者注:テストは、std::swap
インライン化できるリリースビルドではなく、最適化されていないデバッグビルドで行われた可能性があります。デバッグビルドのベンチマークは無意味です。コンパイラは通常、xor-swapをより効率的なものに最適化しません。)