标准C++不支持UUID生成,推荐用Boost.UUID(跨平台)、系统API(Linux/macOS用libuuid、Windows用Rpcrt4)或单头文件guid.hpp(C++17+、零依赖),其中Boost.UUID最成熟,支持v1/v4/v5等版本,v4随机UUID最常用。

标准C++本身不提供UUID生成功能,需借助第三方库或系统API。最常用且跨平台的方式是使用 libuuid(Linux/macOS)或 Windows API(Windows),更推荐用现代C++友好的封装库如 boost::uuids 或轻量级头文件库 guid.hpp。
用 Boost.UUID 生成(推荐,跨平台)
Boost 是最成熟的选择,支持随机、名字空间、nil 等多种 UUID 版本。
安装后(如通过 vcpkg:vcpkg install boost-uuid),代码如下:
#include <boost>
#include <boost>
#include <boost>
#include <iostream>
int main() {
boost::uuids::random_generator gen;
boost::uuids::uuid u = gen(); // 生成 v4 随机 UUID
std::cout <p>注意:需链接 <code>-lboost_uuid -lboost_system</code>(部分平台还需 <code>-lpthread</code>)。</p>
<h3>用系统 API(无依赖,但平台相关)</h3>
<p><strong>Linux/macOS(libuuid):</strong></p>
<ul>
<li>需安装 <code>libuuid-dev</code>(Ubuntu)或 <code>libuuid</code>(macOS via Homebrew)</li>
<li>编译加 <code>-luuid</code>
</li>
</ul>
<pre class="brush:php;toolbar:false;">#include <uuid>
#include <iostream>
#include <string>
std::string generate_uuid() {
uuid_t uuid;
uuid_generate_random(uuid);
char buf[37];
uuid_unparse_lower(uuid, buf);
return std::string(buf);
}</string></iostream></uuid>
Windows(Rpcrt4):
#include <rpc.h>
#include <iostream>
#include <string>
#pragma comment(lib, "Rpcrt4.lib")
std::string generate_uuid() {
UUID uuid;
UuidCreate(&uuid);
RPC_CSTR str;
UuidToStringA(&uuid, &str);
std::string result(reinterpret_cast<char>(str));
RpcStringFreeA(&str);
return result;
}</char></string></iostream></rpc.h>
用单头文件库 guid.hpp(零依赖,C++17+)
轻量、免编译、纯头文件,适合嵌入式或快速原型:
- GitHub 搜索
guid.hpp(作者:jhasse) - 只需包含一个头文件,无需链接
#include "guid.hpp"
#include <iostream>
int main() {
auto id = Guid::Create();
std::cout <h3>注意事项</h3>
<p>UUID 版本选择影响安全性与可预测性:</p>
<ul>
<li>v1:基于时间戳+MAC地址,唯一但可能泄露生成时间与机器信息</li>
<li>v4:纯随机(推荐),满足绝大多数场景</li>
<li>v5:基于 SHA-1 哈希,确定性生成(适合从字符串派生固定 UUID)</li>
</ul>
<p>生产环境优先选 Boost 或 guid.hpp;若只能用系统库,注意 Linux 的 <code>uuid_generate_random()</code> 在熵不足时可能阻塞,可用 <code>uuid_generate()</code> 降级为伪随机(v4 仍适用)。</p>
<p>基本上就这些。</p></iostream>
C++免费学习笔记(深入):立即使用
在学习笔记中,你将探索 C++ 的入门与实战技巧!











