Conversión de C ++ char * [] a char **
Tengo este código simple que compila sin errores / advertencias:
void f(int&, char**&){}
int main(int argc, char* argv[])
{
f(argc, argv);
return 0;
}
Y el siguiente código similar que no compila:
void f(int&, char**&){}
int main()
{
int argc = 2;
char* argv[] = { "", "", nullptr };
f(argc, argv);
//@VS2013 error: cannot convert argument 2 from 'char *[3]' to 'char **&'
//@GCC error: invalid initialization of non-const reference of type 'char**&' from an rvalue of type 'char**'
return 0;
}
Por quéchar*[]
se puede convertir achar**&
en la primera muestra y no se puede convertir en la segunda muestra? ¿Importa si el tamaño es conocido en tiempo de compilación?
EDITAR: Creo que hay 2 conversiones necesarias en el segundo caso, y el compilador solo puede hacer una conversión implícita.
Este código compila bien:
void f(int&, char**&){}
int main()
{
int argc = 2;
char* temp[] = { "", "", nullptr };
char** argv = temp;
f(argc, argv);
return 0;
}