ローカル クラスはついに C 11 の STL アルゴリズムの述語として使用できるようになりますか?

Mary-Kate Olsen
リリース: 2024-11-21 05:04:39
オリジナル
587 人が閲覧しました

Can Local Classes Finally Be Used as Predicates for STL Algorithms in C  11?

STL アルゴリズムでのローカル クラスの使用: ローカル型制限の解明

C プログラミングの領域では、ローカル クラスは長い間禁止されてきました。 STL アルゴリズムの述語。根底にある制限とその制限について疑問が生じます。

C 98/03 標準では、ローカル クラスを含むローカル型をテンプレート引数として使用することを明示的に禁止しています。標準の第 14.3.1 条では、「ローカル型 [...] はテンプレート型パラメータのテンプレート引数として使用してはならない」と明確に述べています。

この制限の背後にある理論的根拠は、一時的なローカルタイプの性質。これらは限られた範囲内に存在するため、その破棄が予期せず発生する可能性があり、STL アルゴリズムの述語として使用すると未定義の動作が発生する可能性があります。

しかし、C 11 の出現により、この制限は解除されました。改訂された標準では、ローカル型をテンプレート引数として使用できるようになり、ローカル クラスが STL アルゴリズムの述語として機能できるようになります。

たとえば、次のコード スニペットを考えてみましょう。

#include <algorithm>
#include <vector>

int main() {
    int array[] = { 1, 2, 3, 4, 5, 6, 7, 8, 9, 10 };
    std::vector<int> v(array, array + 10);

    struct even {
        bool operator()(int x) { return !(x % 2); }
    };
    std::remove_if(v.begin(), v.end(), even());
}
ログイン後にコピー

Inこのコードでは、ローカル クラスで偶数をチェックする述語も定義されています。このクラスは、ベクトル v からすべての偶数を削除する std::remove_if アルゴリズムの引数として直接使用できるようになりました。

ローカル型の制限は当初、潜在的な未定義の動作を防ぐことを目的としていましたが、 C 11 での削除により、関数型プログラミングのシナリオでローカル クラスを使用する新たな可能性が開かれました。

以上がローカル クラスはついに C 11 の STL アルゴリズムの述語として使用できるようになりますか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

ソース:php.cn
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
著者別の最新記事
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート