będę zilustrować moje pytanie o kodzie:dlaczego nie niejawna konwersja z wskaźnikiem odniesienia do const wskaźnik
#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;
}
Kiedy uruchomić ten kod (w VS2008) otrzymuję to: błąd C2664: „PrintInt”: nie można przekonwertować parametru 1 z "unsigned char *" na "const unsigned char * &". Jeśli odkomentuję komentarz "const", to działa dobrze.
Jednak nie należy wskaźnik niejawnie przekształcić w wskaźnik const, a następnie odwołać się? Czy jestem w błędzie, oczekując, że to zadziała? Dzięki!
Tak, co powiedział :) Sygnatura funkcji potrzebuje referencji stałej: choć przekazywanie wskaźników przez odniesienie jest trochę bezcelowe, ponieważ wskaźniki i odniesienia muszą i tak być tej samej wielkości ... – James
To nie jest poprawne. Odniesienia są bardziej prawdopodobne, że mają rozmiar zerowy niż ten sam rozmiar co wskaźniki. – Asher