当我在c ++代码中包含<limits>或<limits.h>时,它会有什么不同

yog*_*sal 0 c++ header-files

有人可以解释一下吗?

    #include <iostream>
    #include <limits.h>
Run Code Online (Sandbox Code Playgroud)

要么

    #include <iostream>
    #include <limits>
Run Code Online (Sandbox Code Playgroud)

Ton*_*roy 5

<limits>是一个C++标准库头文件,它提供了与C头文件类似的见解<limits.h>(也可以在C++中使用<climits>),但它的编写方式在C++程序中更有用和安全:

  • 假设你有一个template <typename Numeric> ...,并且里面的代码想要知道Numeric用户实例化你的模板的类型参数的最小值和最大值:你可以使用std::numeric_limits<Numeric>::min()...::max(); 如果你想从访问相同的价值观<climits>,这将会是很难知道其中SCHAR_MIN,SHRT_MIN,INT_MIN,LONG_MIN使用等,你能完全拥有他们自己之间进行切换-东西那么微不足道很多额外的代码

  • <climits> 有很多宏,并且宏不像"普通"C++标识符那样尊重名称空间或作用域 - 它们的替换是相当不明确的 - 所以它们会使你的程序更容易出错

  • <limits>提供了更多关于数字类型的见解,例如它们是否已签名,它们可以处理的基数为10的数字,它们是否可以表示无穷大或不是数字的标记值等(请参阅标题文档以获得更全面的数据类型)清单和信息)