

新闻资讯
技术教程标准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 是最成熟的选择,支持随机、名字空间、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)。
Linux/macOS(libuuid):
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(作者:jhasse)#include "guid.hpp" #include
int main() { auto id = Guid::Create(); std::cout << id.ToString() << std::endl; // 如:{a1b2c3d4-e5f6-7890-g1h2-i3j4k5l6m7n8} return 0; }
UUID 版本选择影响安全性与可预测性:
生产环境优先选 Boost 或 guid.hpp;若只能用系统库,注意 Linux 的 uuid_generate_random() 在熵不足时可能阻塞,可用 uuid_generate() 降级为伪随机(v4 仍适用)。
基本上就这些。