C++ reinterpret_cast,制作唯一编号
最近,我正在使用代码为我的类创建唯一的 int
数字。
我使用了reinterpret_cast
,其中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
对于所有条目字符串来说真的是唯一吗?
Recently, i'm using a code to make unique int
number for my classes.
I used reinterpret_cast<int>(my_unique_name)
where my_unique_name
is a char []
variable with unique value. Something like below:
const char my_unique_name[] = "test1234";
int generate_unique_id_from_string(const char *str)
{
return reinterpret_cast<int>(str);
}
My question is, is the generated int
really unique for all entry strings ?
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(3)
不,事实并非如此。您正在转换字符串的地址,而不是其内容。
要根据字符串输入创建数值,请使用哈希函数 。然而,这并不能创建一个真正唯一的数字,因为所谓的鸽巢原理。
No, it is not. You are casting the address of the string, not its contents.
To create a numeric value based on string input, use a hash function. However, this doesn't create a truly unique number, because of the so-called pigeonhole principle.
这要看情况。这是我对你的问题的解释:
你试图为每个字符串分配不同的数字。不同来源的相同字符串将具有不同的 ID。
情况 1:
如果
str
恰好是一个可重用的缓冲区,您可以使用它从任何地方读取这些字符串。那么它们都将具有相同的基地址。所以不,它不会是独一无二的。情况 2:
str
恰好是一个堆分配的字符串。此外,所有将被识别的字符串都有重叠的生命周期。那么是的,ID 将是唯一的,因为它们同时驻留在内存中的不同地址。编辑:
如果您想生成唯一的 ID,但希望相同的字符串具有相同的 ID,请查看 Greg 对哈希函数的回答。
It would depend. Here's my interpretation of your question:
You're trying to assign a different number to each string. And identical strings from different sources will have different IDs.
Case 1:
If
str
happens to be a reusable buffer that you use to read in those strings from wherever. Then they'll all have the same base address. So no it will not be unique.Case 2:
str
happens to be a heap-allocated string. Furthermore, all the strings that will be ID'ed have overlapping lifetimes. Then yes, the IDs will be unique because they all reside in memory at the same time at different addresses.EDIT:
If you want to generate a unique ID, but you want identical strings to have the same ID, then look at Greg's answer for a hash function.
它可能并不总是唯一的,
另外,我认为这将取决于平台的字节序。
It may not be always unique,
Also, I think this will depend on the endianness of the platform.