C++ reinterpret_cast,使唯一编号

问题描述:

最近,我正在使用代码来为我的类制作唯一的int数字。C++ reinterpret_cast,使唯一编号

我用reinterpret_cast<int>(my_unique_name)其中my_unique_name是一个char []变量具有唯一值。类似下面:

const char my_unique_name[] = "test1234"; 

int generate_unique_id_from_string(const char *str) 
{ 
    return reinterpret_cast<int>(str); 
} 

我的问题是,是产生int真正为所有入境串独特

不,它不是。您正在投射字符串的地址,而不是其内容。

要根据字符串输入创建数值,请使用hash function。但是,由于所谓的pigeonhole principle,这不会创建真正的独特的号码。

它可能不是始终是唯一的,

id1 = generate_unique_id_from_string("test12344444444444444"); 
id2 = generate_unique_id_from_string("Test12344444444444444"); 

而且,我认为这将取决于平台的字节序。

这取决于。这里是我对你的问题的解释:

你试图给每个字符串分配一个不同的数字。来自不同来源的相同字符串将具有不同的ID。

案例1:

如果str恰好是你使用从哪里这些字符串读取可重复使用的缓冲区。然后他们将拥有相同的基地址。所以没有它不会是唯一的。

案例2:

str正好是一个堆分配字符串。此外,所有将被ID'ed的字符串都有重叠的生命周期。那么是的,这些ID将是唯一的,因为它们全部位于不同地址的同一时间内存在内存中。

编辑:

如果你想生成一个唯一的ID,但你想相同的字符串具有相同的ID,然后看看Greg的答案的哈希函数。