当我在我的 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_MIN
、SHRT_MIN
、INT_MIN
、LONG_MIN
等中的哪一个使用,你必须自己在它们之间切换 - 很多额外的代码用于如此微不足道的事情
<climits>
有很多宏,并且宏不像“普通”C++ 标识符那样尊重命名空间或作用域——它们的替换是非常随意的——所以它们使你的程序更容易出错
<limits>
提供了有关数字类型的更多见解,例如它们是否已签名、它们可以处理的以 10 为底的数字的数量、它们是否可以表示无穷大 - a-number 标记值等(请参阅 header docs 以获得更完整的列表和信息)
有人可以解释一下吗?
#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_MIN
、SHRT_MIN
、INT_MIN
、LONG_MIN
等中的哪一个使用,你必须自己在它们之间切换 - 很多额外的代码用于如此微不足道的事情<climits>
有很多宏,并且宏不像“普通”C++ 标识符那样尊重命名空间或作用域——它们的替换是非常随意的——所以它们使你的程序更容易出错<limits>
提供了有关数字类型的更多见解,例如它们是否已签名、它们可以处理的以 10 为底的数字的数量、它们是否可以表示无穷大 - a-number 标记值等(请参阅 header docs 以获得更完整的列表和信息)