欢迎您访问新疆栾骏商贸有限公司,公司主营电子五金轴承产品批发业务!
全国咨询热线: 400-8878-609

新闻资讯

技术教程

C++如何生成UUID?(代码示例)

作者:冰火之心2026-01-16 00:00:00
标准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)。

用系统 API(无依赖,但平台相关)

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(零依赖,C++17+)

轻量、免编译、纯头文件,适合嵌入式或快速原型:

  • GitHub 搜索 guid.hpp(作者:jhasse)
  • 只需包含一个头文件,无需链接
#i

nclude "guid.hpp" #include int 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 仍适用)。

基本上就这些。