当我在我的 C++ 代码中包含 <limits> 或 <limits.h> 时有什么区别

What difference does it make when I include <limits> or <limits.h> in my c++ code

有人可以解释一下吗?

    #include <iostream>
    #include <limits.h>

    #include <iostream>
    #include <limits>

limits.h 是一个 C 标准库头文件。 limits 是一个 C++ 标准库头文件。它们包含 different 东西。

C++中有climits,提供more or less what limits.h did

<limits> is a C++ Standard Library header providing similar insights to the C header <limits.h> (which is also available in C++ as <climits>),但它是以一种在 C++ 程序中更有用和安全的方式编写的:

  • 假设你有一个 template <typename Numeric> ...,里面的代码想知道用户实例化你的模板的 Numeric 类型参数的最小值和最大值:你可以使用 std::numeric_limits<Numeric>::min()...::max();如果您想从 <climits> 访问相同的值,则很难知道要访问 SCHAR_MINSHRT_MININT_MINLONG_MIN 等中的哪一个使用,你必须自己在它们之间切换 - 很多额外的代码用于如此微不足道的事情

  • <climits> 有很多宏,并且宏不像“普通”C++ 标识符那样尊重命名空间或作用域——它们的替换是非常随意的——所以它们使你的程序更容易出错

  • <limits> 提供了有关数字类型的更多见解,例如它们是否已签名、它们可以处理的以 10 为底的数字的数量、它们是否可以表示无穷大 - a-number 标记值等(请参阅 header docs 以获得更完整的列表和信息)