ホームページ > バックエンド開発 > C++ > std::min および std::max を使用すると、他のファイルで NOMINMAX が機能しないのはなぜですか?

std::min および std::max を使用すると、他のファイルで NOMINMAX が機能しないのはなぜですか?

Linda Hamilton
リリース: 2024-11-10 16:02:02
オリジナル
395 人が閲覧しました

Why is NOMINMAX not working in other files when using std::min and std::max?

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

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