有人可以解釋這對我說:簡單的C++指針鑄造
char* a;
unsigned char* b;
b = a;
// error: invalid conversion from ‘char*’ to ‘unsigned char*’
b = static_cast<unsigned char*>(a);
// error: invalid static_cast from type ‘char*’ to type ‘unsigned char*’
b = static_cast<unsigned char*>(static_cast<void*>(a));
// everything is fine
做什麼投2和3之間的區別?如果3的方法用於其他(更復雜的)類型,那麼是否存在任何缺陷?
[編輯] 由於一些不良提到設計等......
這個簡單的例子來自圖像庫,它給我的指針圖像數據char*
。顯然圖像強度總是正面的,所以我需要將其解釋爲unsigned char
數據。
我不同意你的編輯聲明。如果你給了一個char數組,那麼它就是一個char數組。類型很強大,真正用C++,而且你在做C雜技。在編譯器告訴你錯誤的大部分時間中,絕大多數時間是錯誤的。 – 2010-09-16 11:31:41
如果在某個時刻你確實需要unsigned char,你可以簡單地做到這一點,但在你真正需要的時刻:'int i = 65; unsigned int j = i;'這會編譯,因爲它是合法的,你總是可以合法地將char存儲在一個無符號字符中。 – 2010-09-16 11:46:53
那麼,如果另一個庫需要正確的'unsigned char *':D。你會寫一個循環,並將所有的值複製到一個新的數組? – tauran 2010-09-16 12:04:12