问题:使用std::numeric_limits<int>::max方法时,编译器报warning C4003: “max”宏的实参不足。使用std::max、std::min和定义名为max、min方法时也报错。

原因:由于头文件Windows.h中的定义了宏max和min造成的。在Windows.h头文件中定义了宏max和min,Preprocessor就认为我们使用的是宏max或min,而再调用时调用方法和参数与定义的宏不一致,所以报错。

解决方案:用括号来改变Preprocessor对方法名的理解。

例:

// 使用numeric_limits中的max方法
(std::numeric_limits<Byte>::max)()

// 使用stl中的max方法
(std::max)( 12 );

// 自定义名为max的方法
struct Number
{
    
int (max)();
};

参见:http://www.jeffhung.net/blog/articles/jeffhung/626/