Voy a ilustrar mi pregunta con código:qué hay conversión implícita de puntero para hacer referencia a puntero constante
#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;
}
Cuando ejecuto el código (en VS2008) me sale esto: error C2664: 'PrintInt': no se puede convertir el parámetro 1 de 'unsigned char *' a 'const unsigned char * &'. Si elimino el comentario "const", funciona bien.
Sin embargo, ¿el puntero no debe convertirse implícitamente en el puntero const y luego debe tomarse la referencia? ¿Estoy equivocado al esperar que esto funcione? ¡Gracias!
Sí, lo que dijo :) la función signature necesita una referencia constante: aunque pasar punteros por referencia es un poco inútil ya que los punteros y las referencias deben ser del mismo tamaño de todos modos ... – James
Eso no es correcto. Es más probable que las referencias tengan un tamaño cero que el mismo tamaño que los punteros. – Asher