reinterpret_cast把const string*轉換成const char*出錯?夏洋2017-08-26 16:25:05

假設 string s = “abc”; 。

reinterpret_cast<>並不是把string的『“abc”』部分轉成字元陣列,而是把string這個物件所

直接包含

的空間裡的每一個位元組遍歷一遍。而這個空間未必一定包含著“abc”,很可能只是包含了一個『指向“abc”的空間的指標』。於是你用這種方式遍歷一遍的時候,只遍歷到了這個指標的值本身,也就是“abc”所在的地址。

即便有兩個string包含了相同的字串,這些字串實際在記憶體中儲存的位置也通常是不同的,那麼用reinterpret_cast來求hash得到的結果當然也是不同的。

而註釋中的遍歷方法,即range-based for,由於實際上是透過begin()和end()兩個迭代器來進行遍歷的,這樣就是真的在遍歷其字元內容部分了。

reinterpret_cast把const string*轉換成const char*出錯?暮無井見鈴2017-08-26 20:46:59

你這程式碼是對 string 本身的物件表示求雜湊,而非對字串……

reinterpret_cast把const string*轉換成const char*出錯?匿名使用者2017-08-26 22:11:20

string不是char

reinterpret_cast把const string*轉換成const char*出錯?君士坦丁的仲夏2017-08-26 23:03:12

reinterpret_cast僅限於重解釋而已,要求使用者明確知道兩種型別是可轉型別才可使用。你的string是個obj 沒辦法轉到char*啊。

並且string可以類比char*,你string*類比char*幾個意思?

reinterpret_cast把const string*轉換成const char*出錯?gesturewei2017-08-26 23:33:31

reinterpret_cast的語義是將某個值重新解釋,放在這個場景裡就是把某塊本來是string的記憶體區域看做了char陣列,應該是直接用c_str()直接獲得string內含的char陣列