STL アルゴリズムにおけるローカル クラスの謎
ラムダ式は STL アルゴリズムの述語として広く採用されているにもかかわらず、ローカル クラスは不思議なことにこのユーティリティから除外されます。この質問では、ローカル型が述語として STL アルゴリズムに参加することを禁止する、標準で義務付けられた制限を解明しようとします。
標準の禁止事項
ローカル型の欠如STL アルゴリズム内の述語型としてのクラスは、C に記載されているように、C 98/03 標準によって課された明示的な禁止に由来しています。 03 記事 14.3.1:
「ローカル型、リンケージのない型、名前のない型、またはこれらの型を複合した型は、テンプレート型パラメーターのテンプレート引数として使用してはならない」 ."
この制限は、提供された例のようなコードにフラグを付けるコンパイラーに現れます。ここでは、ローカル構造体を述語として使用することさえできません。 std::remove_if.
制限の根拠
この除外の根拠は推測の中に包まれています。これは見落としだったと推測する人もいますが、アルゴリズム内でアドホックで混乱を招く可能性のある型定義を防ぐことが目的だったと考える人もいます。
C 11 の進化
幸いなことに、 C 11 標準ではこの問題が修正され、テンプレート引数としてのローカル型の制限が解除されました。その結果、現代のコンパイラは一般に、STL アルゴリズムの述語としてローカル クラスの使用を許可します。
結論
ローカル クラスに対する当初の禁止はフラストレーションの原因でしたが、 C 11 での削除により、STL アルゴリズムでローカル型を利用するための新しい道が開かれました。現在、ラムダ式とローカル クラスは効果的な述語オプションとして共存し、開発者にアルゴリズム操作のための多用途ツールを提供します。
以上がSTL アルゴリズムでローカル クラスを述語として使用できないのはなぜですか (C 98/03)?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。