我會說明的代碼,我的問題:爲什麼從沒有指針的隱式轉換參考常量指針
#include <iostream>
void PrintInt(const unsigned char*& ptr)
{
int data = 0;
::memcpy(&data, ptr, sizeof(data));
// advance the pointer reference.
ptr += sizeof(data);
std::cout << std::hex << data << " " << std::endl;
}
int main(int, char**)
{
unsigned char buffer[] = { 0x11, 0x11, 0x11, 0x11, 0x22, 0x22, 0x22, 0x22, };
/* const */ unsigned char* ptr = buffer;
PrintInt(ptr); // error C2664: ...
PrintInt(ptr); // error C2664: ...
return 0;
}
當我運行這段代碼(在VS2008)我得到這個:錯誤C2664:「PrintInt」:無法將參數1從'unsigned char *'轉換爲'const unsigned char * &'。如果我取消註釋「const」評論,它工作正常。
但不應將指針隱式轉換爲常量指針,然後引用?我期待這種方法奏效嗎?謝謝!
是啊,他說什麼:)函數簽名需要一個const引用:雖然通過引用傳遞指針有點沒有意義,因爲指針和引用需要是相同的大小...... – James 2010-05-25 20:29:40
這是不正確的。引用比指針的大小更可能是零大小。 – Asher 2017-02-24 22:24:17