Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/129.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ “什么是”呢;最小最大值“h”;在C++;?_C++_Minmax - Fatal编程技术网

C++ “什么是”呢;最小最大值“h”;在C++;?

C++ “什么是”呢;最小最大值“h”;在C++;?,c++,minmax,C++,Minmax,我一直在脚本中使用#include,并按预期使用min()和max()。我向某人展示了这个,他们以前从未见过它,说它对他们不起作用,并问我为什么不包括和调用std::min()或std::max() 所以我的问题基本上是,为什么我不是?我在一本关于C++的书中发现了这一点:“C++设计模式和衍生品定价”。在谷歌上搜索“minmax.h”,我在最上面的结果中找到了对那本书的引用,因此更让我觉得这是不正常的 有人能告诉我这是什么吗? < P> C++编程语言伴随着。在C++标准库中没有 标题。标准库

我一直在脚本中使用
#include
,并按预期使用
min()
max()
。我向某人展示了这个,他们以前从未见过它,说它对他们不起作用,并问我为什么不包括
和调用
std::min()
std::max()

所以我的问题基本上是,为什么我不是?我在一本关于C++的书中发现了这一点:“C++设计模式和衍生品定价”。在谷歌上搜索“minmax.h”,我在最上面的结果中找到了对那本书的引用,因此更让我觉得这是不正常的


有人能告诉我这是什么吗?

< P> C++编程语言伴随着。在C++标准库中没有<代码> <代码>标题。标准库中没有扩展名为.h的标头。此外,头不是端口C标准库的一部分,因为这些头有C前缀,如<代码> <代码>(它取代了C标准库<代码> <代码>标题),<代码> <代码>(取代了<代码> <代码>标题),用于C++标准库。p> 和函数在标头中声明

话虽如此,在
C:\ProgramFiles(x86)\Windows Kits\10\Include\10.0.18362.0\ucrt
文件夹中似乎确实有一个名为
的MS头,它定义的是
min
max
宏,而不是函数。但是,这是一些特定于实现的头,您应该使用标准的

为什么我不是

人们会做各种奇怪的事情,他们曾经在某个地方听说过,无论是在学校还是作为解决他们眼前需要的“解决方案”(通常是在时间压力下)。然后他们继续以同样的方式做事,因为他们“工作”。但我很高兴你停下来问我。希望我们能把你带回到可移植的C++路径: 不需要,不需要使用非标准
minmax.h
标题。在Windows上,您需要在包含任何标题的情况下定义<代码> NoMINMAX 代码> < /P>古引用W.R.T.C++,使用古编译器,使用非标准C++提供示例(例如标题(如代码> MINMAX .H./COD>)

注意,你提到的书,C++设计模式和衍生产品定价(M.S. Joshi),随后的第二版于2008发布。从下面的摘录中可以看出,本书中的示例依赖于对古代编译器版本的成功编译(2004年不太古老,但离最新版本还很远)

本书的附录D甚至特别提到本书所涵盖的代码示例可能不符合标准,接着是务实的建议,即“[…]解决问题不应该很难”[强调我的]:

<代码>在三个编译器中进行测试:<强>明文2.95,Borland 5.5,VisualC++ 6 <强>。前两个是免费提供的,因此您应该可以毫不费力地找到代码适用的编译器。此外,MingW是GNU编译器gcc的Windows端口,因此代码也应该与该编译器一起工作。Visual C++不是免费的,但在城市中很流行,介绍版也不是很贵。此外,我努力只使用ANSI/ISO代码,因此代码应该在任何编译器下工作。在任何情况下,它都不使用任何尖端语言功能,因此如果它与您的编译器不兼容,解决问题应该不难。

上面列出的编译器版本非常旧:

  • ,
  • ,
与任何其他古老的编译器一样,这些编译器提供非标准的头文件(如
minmax.h
)也就不足为奇了,特别是因为它似乎是一种常见的非标准约定,例如基于以下引用

  • :,可能在GCC 2.95中可以访问
  • : MS库没有定义min和max算法,我们使用的变通方法是定义一个新的头文件,比如minmax.h,它包含在使用这些函数的任何文件中:[……]

  • : 真实世界?MSVC在minmax.h中有宏,称为max和min,每当我打算使用标准std::numeric\u limits::max()函数时,都会导致编译器错误

C++语言的替代参考文献 P>基于以上的文章,该书最有可能被认为是其主要领域的参考,QuANT金融,而不是C++的很多,而后者则是覆盖前者的工具。 <> >对于引用C++语言而不是它在特定应用领域中的应用的引用(着重于后者),请考虑看:


可能与Windows代码API标题“<代码> >定义MIN < /C>和 Max 有关,这导致了使用标准C++和Windows API的大量头痛。您还必须提供那个头吗?如果是,你是从哪里得到的?如果没有,你在哪个平台上?我发现也许这就是你正在使用的。这本书的第二版没有包含
#include
。它似乎使用了标准的
算法。编辑:是的,但搜索
minmax.h
失败。在搜索
minmax
时,我找到了它。@swithwings我没有,我只是写了#include,它似乎可以工作,我检查了我的代码以确定,还检查了书中是否提供了一些代码,但没有,只有#include部分。我在Windows上使用Visual StudioStime::C标准库头只有在从C++访问时才有<代码> C<代码>代码前缀。哇,一定是一本旧书;VS6比我们现在理解的术语早于C++。
#define NOMINMAX
#include <algorithm>
// other includes
#undef NOMINMAX

// your code here