c++ reinterpret_cast,生成唯一的数字

C++ reinterpret_cast, making unique number

本文关键字:唯一 数字 reinterpret cast c++      更新时间:2023-10-16

最近,我正在使用代码为我的类制作唯一的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真的是唯一的对于所有的输入字符串吗?

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

要基于字符串输入创建一个数值,使用散列函数。然而,由于所谓的鸽子洞原理,这并不能创建一个真正的唯一的数字。

看情况而定。以下是我对你问题的解释:

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

案例1:

如果str恰好是一个可重用的缓冲区,您可以使用它从任何地方读取这些字符串。它们都有相同的基址。所以不,它不会是唯一的

案例2:

str恰好是一个堆分配的字符串。此外,所有将被标识的字符串都有重叠的生存期。那么,是的,这些id将是唯一的,因为它们同时驻留在内存中的不同地址。

编辑:

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

它可能并不总是唯一的,

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

另外,我认为这将取决于平台的端序。