ホームページ > バックエンド開発 > C++ > #define NOMINMAX で std::min/max を使用するとエラーが発生するのはなぜですか?

#define NOMINMAX で std::min/max を使用するとエラーが発生するのはなぜですか?

Patricia Arquette
リリース: 2024-11-14 17:18:02
オリジナル
334 人が閲覧しました

Why Do I Get Errors When Using std::min/max with #define NOMINMAX?

#define NOMINMAX での std::min/max の使用

main.cpp ファイルの最近の更新で、次のプリプロセッサ ディレクティブを導入しました。

#define NOMINMAX
#include <Windows.h>
#include <algorithm>
ログイン後にコピー

このアクションにより、コード内で std::max 関数と std::min 関数を利用できるようになります。ただし、その後、他のファイル内でこれらの関数を使用しようとすると、次のようなエラーが発生します。

error C2589: '(' : illegal token on right side of '::'
error C2059: syntax error : '::'
ログイン後にコピー

これらの追加ファイルで NOMINMAX を定義しようとしても、問題は解決しません。

問題はNOMINMAX は、Windows の min および max マクロのエイリアスを定義し、 によって提供される標準の C バージョンを上書きします。これを解決するには、std::min 呼び出しと std::max 呼び出しをかっこで囲みます。

(std::min)(x, y);
ログイン後にコピー

このアプローチにより、関数のようなマクロの呼び出しが回避され、標準の C バージョンを適用できるようになります。

以上が#define NOMINMAX で std::min/max を使用するとエラーが発生するのはなぜですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

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