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

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

Patricia Arquette
Patricia Arquetteオリジナル
2024-11-14 17:18:02347ブラウズ

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

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。