NOMINMAX在我的程序中定义其他任何内容时,我可以遇到什么问题?
据我所知,这将使<Windows.h>没有定义min和max宏,从而与STL许多矛盾,例如std::min(),std::max()或std::numeric_limits<T>::min()得到解决.
我是否正确地假设只有Windows特定和遗留代码会出现问题?几乎所有的库都不应该依赖min()并max()定义为宏?
编辑:其他Windows标题是否会出现问题?
有没有办法让这个功能更优雅?我是C++的新手,我不知道是否有更标准化的方法来做到这一点.这可以变成一个循环,所以变量的数量不受我的代码限制吗?
float smallest(int x, int y, int z) {
int smallest = 99999;
if (x < smallest)
smallest=x;
if (y < smallest)
smallest=y;
if(z < smallest)
smallest=z;
return smallest;
}
Run Code Online (Sandbox Code Playgroud) 在VS 2010 Pro中,我收到一个编译错误,指出命令的max()部分有"预期的标识符".似乎在windows.h头文件中有一个max(a,b)标识,它想要使用它.
我也尝试使用#include,但这并没有解决问题
反正有没有绕过这个?
在研究windows min/ maxmacro问题的解决方案时,我找到了一个我非常喜欢的答案,但我不明白它为什么会起作用.C++规范中是否有一些内容表明在parens中不会发生宏替换?如果是这样的话呢?这只是其他东西的副作用,还是那种以这种方式工作的语言?如果我使用额外的parens max宏不会导致问题:
(std::numeric_limits<int>::max)()
Run Code Online (Sandbox Code Playgroud)
我正在大规模的MFC项目中工作,有一些Windows库使用这些宏,所以我不想使用这个#undef技巧.
我的另一个问题是这个.#undef max.cpp文件中是否只影响它在其中使用的文件,或者它是否会max为其他编译单元取消定义?