c++ - 无法调用 std::max 因为 minwindef.h 定义了 "max"

标签 c++ macros std

<分区>

我将如何实际调用 std::max?该代码不会在 visual studio 2013 中编译,因为它采用“max”作为宏。

std::max( ... );

期望在“std::”之后有一个标识符。

最佳答案

您可以取消定义宏:

#undef max

编辑:似乎可以通过将宏安全地禁用

#define NOMINMAX

在定义它们的头文件之前(很可能是 windef.h,您可能会间接包含它)。

为避免取消定义宏,您可以简单地将函数括在括号中

(std::max)(...)

正如 chris 在评论中指出的那样,类函数宏需要宏名称后的标记作为左括号才能展开。将名称括在括号中实际上只是一种技巧,一旦您将宏放在一边,就可以使下一个标记成为右括号,而不会改变含义。

关于c++ - 无法调用 std::max 因为 minwindef.h 定义了 "max",我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22744262/

相关文章:

excel - 如果在 Excel 中满足条件,如何在两个单元格之间绘制虚线

c++ - 由元素和其他集合组成的集合,用于在 C++ 中构造集合

c++ - c++中迭代器的操作

c++ - 如何将元素插入 vector 的开头?

c++ - 如果线程无法关闭,则进行适当的清理 - C++

linux - 用于 GCC/G++ 的宏来区分 Linux 和 Mac OSX?

C++ Stringstream 给变量赋了错误的值?

rust - 如何在rust宏中从 “Bar”获得 “Foo::Bar”?

c++ - ldconfig 没有看到自定义库

c++ - 自定义宽度变量