min()/max() 呼び出しを含むコードでの奇妙な C++ エラー

StackOverflow https://stackoverflow.com/questions/14165

  •  08-06-2019
  •  | 
  •  

質問

C++ コードに min() または max() 呼び出しがあると、奇妙なエラーが発生します。Visual C++ コンパイラを使用しています。

役に立ちましたか?

解決

コードに次のものが含まれているかどうかを確認してください windows.h ヘッダー ファイルと、コードまたは他のサードパーティのヘッダーのいずれかが独自のヘッダーを持っています。 分()/最大() 定義。「はい」の場合は、先頭に windows.h の定義を持つ包含 ノーミンマックス このような:

#define NOMINMAX
#include <windows.h>

他のヒント

別の可能性としては副作用が考えられます。ほとんどの min/max マクロにはパラメータが複数回含まれるため、期待どおりに動作しない可能性があります。エラーや警告が生成される場合もあります。

max(a,i++) expands as ((a) > (i++) ? (a) : (i++))

その後、私はプラス 1 またはプラス 2 になります

展開内の () は、数式で呼び出した場合の問題を回避するためのものです。max(a,b+c) を展開してみてください

Windows ではこれを関数スタイルのマクロとして定義しているため、次の回避策が利用可能です。

int i = std::min<int>(3,5);

これはマクロなので機能します min() の場合にのみ展開されます。 min 続いて (, 、その後に続く場合はそうではありません <.

うーん...範囲を広げてください、おい: std::min(), std::max().

もう何年も使っていないのですが、メモリブーストにより最小値と最大値も割り当てられるのではないでしょうか?

正直に言うと、最小/最大に関しては、自分で定義するのが最善だと思います。

#define min(a,b) ((a) < (b) ? (a) : (b))
#define max(a,b) ((a) >= (b) ? (a) : (b))
ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top