Сведения о вопросе

FUTER

08:31, 19th August, 2020

Теги

c++   c    

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

Просмотров: 462   Ответов: 6

Я вижу странные ошибки, когда мой код C++ имеет min() или max() звонки. Я использую компиляторы Visual C++.



  Сведения об ответе

nYU

23:40, 21st August, 2020

Проверьте, включает ли ваш код файл заголовка windows.h, и либо ваш код, либо другие сторонние заголовки имеют свои собственные определения min() / max() . Если да, то добавьте к своему windows.h включению определение NOMINMAX следующим образом:

#define NOMINMAX
#include <windows.h>


  Сведения об ответе

pumpa

14:25, 12th August, 2020

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

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

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


  Сведения об ответе

VERSUION

10:39, 9th August, 2020

Другая возможность может быть связана с побочными эффектами. Большинство min / max macros будет включать параметры несколько раз и может не делать то, что вы ожидаете. Также могут создаваться ошибки и предупреждения.

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

afterwards i is either plus 1 or plus 2


  Сведения об ответе

прога

05:50, 23rd August, 2020

Тьфу... прицел его, чувак: std::min() , std::max() .


  Сведения об ответе

PROGA

09:43, 20th August, 2020

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

#define min(a,b) ((a) < (b) ? (a) : (b))
#define max(a,b) ((a) >= (b) ? (a) : (b))


  Сведения об ответе

dump

06:12, 11th August, 2020

Я не пользовался им уже много лет, но по памяти boost присваивает мин и Макс тоже, возможно?


Ответить на вопрос

Чтобы ответить на вопрос вам нужно войти в систему или зарегистрироваться