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 サイトの他の関連記事を参照してください。