问题:使用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对方法名的理解。
例:
(std::numeric_limits < Byte > ::max)()
// 使用stl中的max方法
(std::max)( 1 , 2 );
// 自定义名为max的方法
struct Number
{
int (max)();
};
本文介绍了在使用C++标准库函数如std::max时遇到的问题,特别是当这些函数与Windows.h头文件中的宏定义冲突时如何解决。文章提供了具体的代码示例,并详细解释了通过添加括号来避免预处理器误判的方法。
945

被折叠的 条评论
为什么被折叠?



