スタック オーバーフローに関する議論で、次の点に関する懸念が浮上しています。 Microsoft Visual C (MSVC) の 2 フェーズ テンプレートのインスタンス化の誤った実装。このプロセスには、最初の構文チェックとそれに続く完全な関数/クラス本体のチェックが含まれます。
結局のところ、MSVC はテンプレート エンティティに対して基本的な構文チェックのみを実行します。参照名が少なくとも宣言されているかどうかは完全には検証されず、潜在的なエラーが見逃される可能性があります。
不正な構文チェックを超えて、2 フェーズ ルックアップ プロセス自体MSVC では問題に直面しています。最初のフェーズでは、関数呼び出しやメンバー呼び出しなどの依存式は完全には解決されません。代わりに、MSVC は解決策を第 2 フェーズに延期します。
ただし、このアプローチの問題は第 2 フェーズで明らかになります。標準では、定義ポイントとインスタンス化ポイントの間に追加された宣言のみを 2 番目の検索フェーズで導入できることが義務付けられていますが、MSVC はこの制限に従っていません。これは、通常の非修飾ルックアップを拡張して、最初のフェーズで表示された宣言を含め、潜在的なバインド エラーや不正な実行動作につながります。
これらのエラーを強調表示する 1 つの例は、試行時に発生します。テンプレート クラス S 内の foo(0) 式を解決します。標準準拠のコンパイラは最初のフェーズでこの呼び出しを解決し、それを foo(void*) にバインドしますが、MSVC解決を遅らせて foo(int) にバインドしようとすると、エラーが発生します。
この不適切な実装は、コードの機能と開発者のエクスペリエンスに影響を与えます。予期しないエラーが発生する可能性があり、診断と解決が困難になる場合があります。さらに、他のコンパイラやプラットフォームへのコードの移植性が妨げられる可能性があります。
Microsoft Visual C での壊れた 2 フェーズ テンプレートのインスタンス化の問題は、重大な懸念事項であり、によっても認識されています。開発者。 MSVC を使用する開発者は、これらの問題を認識し、予期しないエラーを回避するために適切な予防措置を講じることが重要です。
以上がMicrosoft Visual C は 2 フェーズ テンプレートのインスタンス化を正しく実装していますか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。