首页  >  文章  >  后端开发  >  使用 std::min 和 std::max 时,为什么 NOMINMAX 在其他文件中不起作用?

使用 std::min 和 std::max 时,为什么 NOMINMAX 在其他文件中不起作用?

Linda Hamilton
Linda Hamilton原创
2024-11-10 16:02:02325浏览

Why is NOMINMAX not working in other files when using std::min and std::max?

NOMINMAX 和 std::min/max 碰撞

要启用标准库的 std::min 和 std::max 函数,您已在 main.cpp 文件中定义了 NOMINMAX 宏。但是,您在其他文件中使用这些函数时遇到问题。

NOMINMAX 的定义是为了禁用 Windows 头文件中的某些旧定义,包括将 min 和 max 重新定义为宏。这是因为在早期版本的 Visual C 编译器中,这些宏是由 Windows 头文件定义的,可能与标准库的定义冲突。

要解决此问题,您需要确保在所有宏中都定义了 NOMINMAX您打算使用 std::min 或 std::max 的文件。但是,简单地将宏定义添加到其他文件中似乎不起作用。

这是因为 #define 指令具有全局作用域并影响文件中的所有后续代码。但是,宏不适用于已经经过预处理的代码。因此,后续文件中 NOMINMAX 的定义可能不会影响您已经编写的代码。

要解决此问题,您可以用括号将函数名称括起来:

(std::min)(x, y);

此语法将确保不应用类似函数的宏,并且编译器会将函数调用解析为 std::min。

以上是使用 std::min 和 std::max 时,为什么 NOMINMAX 在其他文件中不起作用?的详细内容。更多信息请关注PHP中文网其他相关文章!

声明:
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn