这是生成GUID的可靠方法吗?

时间:2016-12-15 23:30:05

标签: c++ guid

我正在尝试以平台无关的方式生成GUID,大多数搜索结果建议使用BOOST或平台特定的库。我记得曾经遇到过以下片段,我想知道这是否是生成GUID的可靠方法:

unsigned int generateGuid()
{
    char c;
    return (unsigned int)&c;
}

更具体地说,这是否始终保证了一个独特的价值?如果没有,那么做这个的一些好的轻量级和跨平台方法是什么?

2 个答案:

答案 0 :(得分:1)

A basic example:

#include <boost/uuid/uuid.hpp>            // uuid class
#include <boost/uuid/uuid_generators.hpp> // generators
#include <boost/uuid/uuid_io.hpp>         // streaming operators etc.

int main() {
    boost::uuids::uuid uuid = boost::uuids::random_generator()();
    std::cout << uuid << std::endl;
}
Example output:

答案 1 :(得分:0)

不,不是。此函数将根据调用的位置从堆栈返回一些地址。在两个后续调用或紧密循环中,它将始终是相同的地址。例如,在Visual Studio中,我认为默认堆栈大小为1 MB,因此在最好的情况下,您将获得一百万个唯一值。典型程序不使用超过1KB的堆栈,因此在这种情况下,您将获得至多一千个唯一值。