std::max()
中有
<utility>
,所以这个可以编译(Godbolt):
#include <utility>
int main()
{
return std::max(2,3);
}
GCC 在 std::max()
中没有
<utility>
,因此它无法编译(Godbolt)。 clang(神箭)也没有。 CppReference
未将其列为 <utility>
<algorithm>
(CppReference)。
是否允许库供应商(例如 Microsoft)向任意标头添加函数?
我看到的问题是代码的可移植性。这样,我的代码只能与 MSVC 一起使用,而不能与其他代码一起使用。更糟糕的是,我最终陷入了这种情况,因为我使用了 Visual Studio 的“优化包含图”功能,然后它决定<utility>
需要包含更少的代码行(或者无论他们的指标是优化包含)。在标准中,我只在“标题
概要”一章(C++23 草案 N4928 中的第 27.4 章)中找到(搜索词
const T& max
)std::max() 函数。
1 — C++ 标头可以包含其他 C++ 标头。 ...3 — C 标准库头文件应仅包含其相应的 C++ 标准库头文件,如 [headers] 中所述。