2011-10-09 51 views
1

最近,我正在使用代碼來爲我的類製作唯一的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真正爲所有入境串獨特

回答

7

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

要根據字符串輸入創建數值,請使用hash function。但是,由於所謂的pigeonhole principle,這不會創建真正的獨特的號碼。

0

它可能不是始終是唯一的,

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

而且,我認爲這將取決於平臺的字節序。

3

這取決於。這裏是我對你的問題的解釋:

你試圖給每個字符串分配一個不同的數字。來自不同來源的相同字符串將具有不同的ID。

案例1:

如果str恰好是你使用從哪裏這些字符串讀取可重複使用的緩衝區。然後他們將擁有相同的基地址。所以沒有它不會是唯一的。

案例2:

str正好是一個堆分配字符串。此外,所有將被ID'ed的字符串都有重疊的生命週期。那麼是的,這些ID將是唯一的,因爲它們全部位於不同地址的同一時間內存在內存中。

編輯:

如果你想生成一個唯一的ID,但你想相同的字符串具有相同的ID,然後看看Greg的答案的哈希函數。