应使用 std::numeric_limits::max() 和 ::min() 获取基础类型极值,需包含 头文件;注意浮点型 min() 返回最小正正规数,lowest() 才是全范围下界,char 类型须显式指定 signed 或 unsigned 以避免平台差异。

用 std::numeric_limits 获取任意基础类型的极值
直接查 std::numeric_limits<t>::max()</t> 和 std::numeric_limits<t>::min()</t>,这是 C++ 标准库唯一可靠、跨平台的方式。别手写宏或硬编码,也别依赖 limits.h 或 climits 里的 C 风格常量(比如 INT_MAX),它们只覆盖部分整型,且不支持浮点、char 有符号性歧义等问题。
需要包含头文件:<limits></limits>
示例:
#include <limits>
#include <iostream>
int main() {
std::cout ::max() ::min() ::lowest()
<h3>
<code>min()</code> 和 <code>lowest()</code> 的区别必须分清</h3>
<p>对有符号整型,<code>min()</code> 返回最小可表示值(如 <code>int</code> 是 -2147483648);但对浮点类型,<code>min()</code> 返回的是**最小正正规数**(即最接近 0 的正数),不是整个范围的下界。真要拿浮点数能表示的最小负值,得用 <code>lowest()</code>。</p><div class="aritcle_card flexRow artxards">
<div class="artcardd flexRow">
<a class="aritcle_card_img" rel="nofollow" href="/xiazai/gongju/2823" title="C++14"><img
src="https://img.php.cn/upload/manual/001/431/639/6ac8b33c327c4749.png" alt="C++14" onerror="this.onerror='';this.src='/static/lhimages/moren/morentu.png'" ></a>
<div class="aritcle_card_info flexColumn">
<a rel="nofollow" href="/xiazai/gongju/2823" title="C++14" class="overflowclass">C++14</a>
<p class="overflowclass">C++14 对 C++11 的修正与增强版本,适合旧系统维护和较老工具链兼容。</p>
</div>
<a rel="nofollow" href="/xiazai/gongju/2823" title="C++14" class="aritcle_card_btn flexRow flexcenter"><b></b><span>下载</span>
</a>
</div>
</div>
<ul>
<li>
<code>std::numeric_limits<float>::min()</float></code> → 类似 <code>1.17549e-38</code>
</li>
<li>
<code>std::numeric_limits<float>::lowest()</float></code> → 类似 <code>-3.40282e+38</code>
</li>
<li>
<code>std::numeric_limits<double>::min()</double></code> → 最小正正规数,不是 -DBL_MAX</li>
</ul>
<h3>注意 <code>char</code> 类型的有符号性陷阱</h3>
<p><code>char</code> 在不同编译器/平台可能默认是有符号或无符号,导致 <code>std::numeric_limits<char>::min()</char></code> 返回 -128 或 0,行为不可控。如果业务逻辑依赖具体极值,显式使用 <code>signed char</code> 或 <code>unsigned char</code>。</p>
<ul>
<li>想确保是 -128 ~ 127:用 <code>std::numeric_limits<signed char>::min()</signed></code>
</li>
<li>想确保是 0 ~ 255:用 <code>std::numeric_limits<unsigned char>::min()</unsigned></code>
</li>
<li>避免裸写 <code>char</code> + <code>numeric_limits</code>,除非你已确认编译器行为</li>
</ul>
<h3>编译期常量?加 <code>constexpr</code> 就行</h3>
<p>所有 <code>std::numeric_limits</code> 的静态成员都是字面量常量(literal type),天然支持 <code>constexpr</code>,可直接用于模板参数、数组长度、<code>static_assert</code> 等场景。</p>
<ul>
<li><code>static_assert(std::numeric_limits<short>::digits >= 15);</short></code></li>
<li><code>int arr[std::numeric_limits<uint8_t>::max() + 1]; // 长度 256</uint8_t></code></li>
<li>无需额外修饰,C++11 起就保证是编译期求值</li>
</ul>
<p>真正容易被忽略的是浮点类型的 <code>lowest()</code> 和整型 <code>min()</code> 的语义分裂,以及 <code>char</code> 类型未显式限定符号时的平台依赖性。这两处不留意,调试时会卡很久。</p></iostream></limits>C++免费学习笔记(深入):立即使用
在学习笔记中,你将探索 C++ 的入门与实战技巧!










