即使我没有#include <algorithm>,为什么仍然可以使用std :: max和std :: min?

安东尼
#include <iostream>

int main()
{
   int value1 = 1, value2 = 10;
   std::cout << "Min = " << std::min(value1,value2) <<std::endl;
   std::cout << "Max = " << std::max(value1,value2)<< std::endl;              
} 

据我所知,minmax函数在中定义<algorithm>

如果我没有告诉预处理器包括<algorithm>为什么代码仍然起作用?

至少

最有可能的是,iostream其中的某些内容直接或间接包含了一些定义std::min和的标头std::max(可能algorithm本身已包括在内。也许一些内部标头用于实现C ++标准库。)

您不应依赖此行为。包括algorithm如果你想要的std ::分和std ::最大。

如果您习惯于使用模块系统的语言,在该系统中,模块可以导入其他模块,而不会被迫从其导入中导出任何内容(例如,Racket的模块系统),则此行为可能会造成混淆。

但是,请回想一下#include正在执行文本替换。处理#include行后,将从.cpp文件中将其删除,并替换为其所指向的文件的内容。

大多数编译器都有一个选项,可以转储运行预处理器的输出,以便您可以跟踪包含哪些内容。您在对kmort答案的评论中说,您正在使用Visual Studio Express。使用Visual C ++编译器将文件预处理为文件的命令行cl /P foo.cpp使用此输出,我们可以发现的定义std::max来自特定于实现的标头xutility(将插入号放在文本“ std:max”内部,然后在Visual Studio中按F12键甚至更快。:-])

kmort还提到了/showIncludes编译器开关。使用它,我们可以轻松地跟踪包含链。这是我跑步时减少的输出。

Note: including file: C:\Program Files (x86)\Microsoft Visual Studio 11.0\VC\INCLUDE\iostream
Note: including file:  C:\Program Files (x86)\Microsoft Visual Studio 11.0\VC\INCLUDE\istream
Note: including file:   C:\Program Files (x86)\Microsoft Visual Studio 11.0\VC\INCLUDE\ostream
Note: including file:    C:\Program Files (x86)\Microsoft Visual Studio 11.0\VC\INCLUDE\ios
Note: including file:     C:\Program Files (x86)\Microsoft Visual Studio 11.0\VC\INCLUDE\xlocnum
Note: including file:      C:\Program Files (x86)\Microsoft Visual Studio 11.0\VC\INCLUDE\streambuf
Note: including file:       C:\Program Files (x86)\Microsoft Visual Studio 11.0\VC\INCLUDE\xiosbase
Note: including file:        C:\Program Files (x86)\Microsoft Visual Studio 11.0\VC\INCLUDE\xlocale
Note: including file:         C:\Program Files (x86)\Microsoft Visual Studio 11.0\VC\INCLUDE\stdexcept
Note: including file:          C:\Program Files (x86)\Microsoft Visual Studio 11.0\VC\INCLUDE\xstring
Note: including file:           C:\Program Files (x86)\Microsoft Visual Studio 11.0\VC\INCLUDE\xmemory0
Note: including file:            C:\Program Files (x86)\Microsoft Visual Studio 11.0\VC\INCLUDE\xutility

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

即使我没有#include <algorithm>,为什么仍然可以使用std :: max和std :: min?

来自分类Dev

当我似乎可以使用std :: exception时,即使没有包含它,也必须#include <exception>吗?

来自分类Dev

为什么我的模式未涵盖`std :: i64 :: MIN .. =-1i64`和`1i64 .. = std :: i64 :: MAX`?

来自分类Dev

std :: min / max类型推导在Linux和Windows上不同

来自分类Dev

有没有一种方法可以使用min和max来编写if-else?

来自分类Dev

有没有一种方法可以使用min和max来编写if-else?

来自分类Dev

std :: min / std :: max与“本征型”

来自分类Dev

$ min / $ max和$ lte / $ gt有什么区别?

来自分类Dev

为什么在c ++中可以在没有#include线程的情况下使用std :: thread?

来自分类Dev

有没有一种方法可以使用std :: sort()并仍然保持基于1的索引?

来自分类Dev

有没有一种方法可以使用std :: sort()并仍然保持基于1的索引?

来自分类Dev

为什么make_unique可以使用std :: bind作为参数的构造函数有额外的动作?

来自分类Dev

std :: min / std :: max作为模板比较器

来自分类Dev

std :: min / std :: max作为模板比较器

来自分类Dev

优化使用$ min和$ max的mongoDB聚合

来自分类Dev

使用 max 和 min 构建 if 语句

来自分类Dev

使用 MAX 和 MIN 计算字段的分数

来自分类Dev

带有参数包的 std::min

来自分类Dev

为什么min()在Xcode中有效,而max()无效?

来自分类Dev

为什么range()函数比min和max的组合慢?

来自分类Dev

为什么我无法使用 CreateFile Win32 API 打开文件 RW,但可以使用 std::remove 将其删除?

来自分类Dev

std::min - 设计考虑

来自分类Dev

我必须仅使用min()和max()函数对数字进行排序

来自分类Dev

为什么标记使用不当和不正确的HTML仍然可以使用?

来自分类Dev

获取std :: min_element和std :: max_element以将迭代器返回到上一个值?

来自分类Dev

为什么我们仍然可以使用已处置的对象?

来自分类Dev

C ++ —`algorithm`库和命名空间`std`

来自分类Dev

为什么std :: min仅支持initializer_list?

来自分类Dev

AWS角色和用户没有任何政策,为什么我仍然可以访问K8s集群?

Related 相关文章

  1. 1

    即使我没有#include <algorithm>,为什么仍然可以使用std :: max和std :: min?

  2. 2

    当我似乎可以使用std :: exception时,即使没有包含它,也必须#include <exception>吗?

  3. 3

    为什么我的模式未涵盖`std :: i64 :: MIN .. =-1i64`和`1i64 .. = std :: i64 :: MAX`?

  4. 4

    std :: min / max类型推导在Linux和Windows上不同

  5. 5

    有没有一种方法可以使用min和max来编写if-else?

  6. 6

    有没有一种方法可以使用min和max来编写if-else?

  7. 7

    std :: min / std :: max与“本征型”

  8. 8

    $ min / $ max和$ lte / $ gt有什么区别?

  9. 9

    为什么在c ++中可以在没有#include线程的情况下使用std :: thread?

  10. 10

    有没有一种方法可以使用std :: sort()并仍然保持基于1的索引?

  11. 11

    有没有一种方法可以使用std :: sort()并仍然保持基于1的索引?

  12. 12

    为什么make_unique可以使用std :: bind作为参数的构造函数有额外的动作?

  13. 13

    std :: min / std :: max作为模板比较器

  14. 14

    std :: min / std :: max作为模板比较器

  15. 15

    优化使用$ min和$ max的mongoDB聚合

  16. 16

    使用 max 和 min 构建 if 语句

  17. 17

    使用 MAX 和 MIN 计算字段的分数

  18. 18

    带有参数包的 std::min

  19. 19

    为什么min()在Xcode中有效,而max()无效?

  20. 20

    为什么range()函数比min和max的组合慢?

  21. 21

    为什么我无法使用 CreateFile Win32 API 打开文件 RW,但可以使用 std::remove 将其删除?

  22. 22

    std::min - 设计考虑

  23. 23

    我必须仅使用min()和max()函数对数字进行排序

  24. 24

    为什么标记使用不当和不正确的HTML仍然可以使用?

  25. 25

    获取std :: min_element和std :: max_element以将迭代器返回到上一个值?

  26. 26

    为什么我们仍然可以使用已处置的对象?

  27. 27

    C ++ —`algorithm`库和命名空间`std`

  28. 28

    为什么std :: min仅支持initializer_list?

  29. 29

    AWS角色和用户没有任何政策,为什么我仍然可以访问K8s集群?

热门标签

归档