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的答案的哈希函数。