NOMINMAX と std::min/max の衝突
標準ライブラリの std::min 関数と std::max 関数の使用を有効にするには、 main.cpp ファイルに NOMINMAX マクロを定義しました。ただし、他のファイルでこれらの関数を使用すると問題が発生します。
NOMINMAX は、マクロとしての min と max の再定義を含む、Windows ヘッダー ファイル内の特定の従来の定義を無効にするように定義されています。これは、以前のバージョンの Visual C コンパイラでは、これらのマクロが Windows ヘッダー ファイルによって定義されており、標準ライブラリの定義と競合する可能性があるためです。
この問題を解決するには、すべてのファイルで NOMINMAX が定義されていることを確認する必要があります。 std::min または std::max を使用するファイル。ただし、マクロ定義を他のファイルに追加するだけでは機能しないようです。
これは、#define ディレクティブがグローバル スコープを持ち、ファイル内の後続のすべてのコードに影響を与えるためです。ただし、マクロはすでに前処理されたコードには適用されません。したがって、後のファイルでの NOMINMAX の定義は、すでに作成したコードには影響しない可能性があります。
この問題を回避するには、関数名をかっこで囲むことができます。
(std::min)(x, y);
この構文では、関数のようなマクロが適用されないことが保証され、コンパイラーは関数呼び出しを std::min に解決します。
以上がstd::min および std::max を使用すると、他のファイルで NOMINMAX が機能しないのはなぜですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。