标准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#include #include #include int main() { boost::uuids::random_generator gen; boost::uuids::uuid u = gen(); // 生成 v4 随机 UUID std::cout << u << std::endl; // 输出形如:f2a1e9c8-6b5d-4c7a-9e1f-2a3b4c5d6e7f return 0; }
注意:需链接 -lboost_uuid -lboost_system(部分平台还需 -lpthread)。
立即学习“C++免费学习笔记(深入)”;
用系统 API(无依赖,但平台相关)
Linux/macOS(libuuid):
《PHP设计模式》首先介绍了设计模式,讲述了设计模式的使用及重要性,并且详细说明了应用设计模式的场合。接下来,本书通过代码示例介绍了许多设计模式。最后,本书通过全面深入的案例分析说明了如何使用设计模式来计划新的应用程序,如何采用PHP语言编写这些模式,以及如何使用书中介绍的设计模式修正和重构已有的代码块。作者采用专业的、便于使用的格式来介绍相关的概念,自学成才的编程人员与经过更多正规培训的编程人员
- 需安装
libuuid-dev(Ubuntu)或libuuid(macOS via Homebrew) - 编译加
-luuid
#include#include #include std::string generate_uuid() { uuid_t uuid; uuid_generate_random(uuid); char buf[37]; uuid_unparse_lower(uuid, buf); return std::string(buf); }
Windows(Rpcrt4):
#include#include #include #pragma comment(lib, "Rpcrt4.lib") std::string generate_uuid() { UUID uuid; UuidCreate(&uuid); RPC_CSTR str; UuidToStringA(&uuid, &str); std::string result(reinterpret_cast (str)); RpcStringFreeA(&str); return result; }
用单头文件库 guid.hpp(零依赖,C++17+)
轻量、免编译、纯头文件,适合嵌入式或快速原型:
- GitHub 搜索
guid.hpp(作者:jhasse) - 只需包含一个头文件,无需链接
#include "guid.hpp" #includeint main() { auto id = Guid::Create(); std::cout << id.ToString() << std::endl; // 如:{a1b2c3d4-e5f6-7890-g1h2-i3j4k5l6m7n8} return 0; }
注意事项
UUID 版本选择影响安全性与可预测性:
- v1:基于时间戳+MAC地址,唯一但可能泄露生成时间与机器信息
- v4:纯随机(推荐),满足绝大多数场景
- v5:基于 SHA-1 哈希,确定性生成(适合从字符串派生固定 UUID)
生产环境优先选 Boost 或 guid.hpp;若只能用系统库,注意 Linux 的 uuid_generate_random() 在熵不足时可能阻塞,可用 uuid_generate() 降级为伪随机(v4 仍适用)。
基本上就这些。









