reinterpret_cast把const string*轉換成const char*出錯?
匿名使用者 發表于 娛樂2017-08-26
假設 string s = “abc”; 。
reinterpret_cast<>並不是把string的『“abc”』部分轉成字元陣列,而是把string這個物件所
直接包含
的空間裡的每一個位元組遍歷一遍。而這個空間未必一定包含著“abc”,很可能只是包含了一個『指向“abc”的空間的指標』。於是你用這種方式遍歷一遍的時候,只遍歷到了這個指標的值本身,也就是“abc”所在的地址。
即便有兩個string包含了相同的字串,這些字串實際在記憶體中儲存的位置也通常是不同的,那麼用reinterpret_cast來求hash得到的結果當然也是不同的。
而註釋中的遍歷方法,即range-based for,由於實際上是透過begin()和end()兩個迭代器來進行遍歷的,這樣就是真的在遍歷其字元內容部分了。
你這程式碼是對 string 本身的物件表示求雜湊,而非對字串……
string不是char
reinterpret_cast僅限於重解釋而已,要求使用者明確知道兩種型別是可轉型別才可使用。你的string是個obj 沒辦法轉到char*啊。
並且string可以類比char*,你string*類比char*幾個意思?
reinterpret_cast的語義是將某個值重新解釋,放在這個場景裡就是把某塊本來是string的記憶體區域看做了char陣列,應該是直接用c_str()直接獲得string內含的char陣列