Странные ошибки C ++ в коде, содержащем вызовы min() / max()

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++))

после этого i будет либо плюс 1 , либо плюс 2

Функция () в расширении предназначена для того, чтобы избежать проблем, если вы вызываете ее с помощью формул.Попробуйте увеличить max (a, b + c)

Поскольку Windows определяет это как макрос в функциональном стиле, доступно следующее обходное решение:

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

Это работает, потому что макрос min() расширяется только тогда, когда min за ним следует (, и не тогда, когда за ним следует <.

Тьфу...сделай это, чувак: std::min(), std::max().

Я не пользовался им много лет, но из-за увеличения памяти, возможно, также назначаются min и max?

Честно говоря, когда дело доходит до min / max, я считаю, что лучше всего просто определить свой собственный:

#define min(a,b) ((a) < (b) ? (a) : (b))
#define max(a,b) ((a) >= (b) ? (a) : (b))
Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top