C ++ reinterpret_cast,制作唯一编号

时间:2011-10-09 08:15:21

标签: c++ reinterpret-cast

最近,我正在使用代码为我的班级制作唯一的int号码。

我使用了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真的是唯一吗?

3 个答案:

答案 0 :(得分:7)

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

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

答案 1 :(得分:3)

这取决于。以下是我对您的问题的解释:

您正在尝试为每个字符串分配不同的数字。来自不同来源的相同字符串将具有不同的ID。

案例1:

如果str碰巧是一个可重复使用的缓冲区,您可以从任何地方读取这些字符串。然后他们都将拥有相同的基地址。所以不,不会独一无二。

案例2:

str恰好是堆分配的字符串。此外,所有将被识别的字符串都有重叠的生命周期。然后是,ID将是唯一的,因为它们都在不同的地址同时驻留在内存中。

编辑:

如果要生成唯一ID,但希望相同的字符串具有相同的ID,请查看Greg对哈希函数的回答。

答案 2 :(得分:0)

它可能并不总是唯一的,

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

另外,我认为这取决于平台的字节顺序。