1. ホーム
  2. c++

[解決済み] なぜ多くのC++標準ライブラリコードで不等式が (!(a==b)) としてテストされるのですか?

2022-05-18 09:25:33

疑問点

これはC++の標準ライブラリにあるコードです。 remove のコードです。なぜ不等式がテストされるかというと if (!(*first == val)) ではなく if (*first != val) ?

 template <class ForwardIterator, class T>
      ForwardIterator remove (ForwardIterator first, ForwardIterator last, const T& val)
 {
     ForwardIterator result = first;
     while (first!=last) {
         if (!(*first == val)) {
             *result = *first;
             ++result;
         }
         ++first;
     }
     return result;
 }

どのように解決するのですか?

なぜなら、これは T に要求される唯一の要件が operator== . T に要求できるのは operator!= を要求することもできますが、ここでの一般的な考え方は、テンプレートの利用者にできるだけ負担をかけないようにすることであり、他のテンプレートでは必要な operator== .