【问题标题】:C++ reinterpret_cast, making unique numberC++ reinterpret_cast,制作唯一编号
【发布时间】:2011-10-09 08:15:21
【问题描述】:

最近,我正在使用代码为我的班级制作唯一的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 真的唯一 吗?

【问题讨论】:

    标签: c++ reinterpret-cast


    【解决方案1】:

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

    要根据字符串输入创建数值,请使用hash function。然而,这并不能创建一个真正的唯一号码,因为所谓的pigeonhole principle

    【讨论】:

      【解决方案2】:

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

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

      案例一:

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

      案例 2:

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

      编辑:

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

      【讨论】:

        【解决方案3】:

        它可能并不总是独一无二的,

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

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

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2017-09-28
          • 1970-01-01
          • 2010-11-16
          • 2018-12-25
          相关资源
          最近更新 更多