C ++ char * [] para char ** conversão
Eu tenho este código simples que compila sem erros / avisos:
void f(int&, char**&){}
int main(int argc, char* argv[])
{
f(argc, argv);
return 0;
}
E próximo código semelhante que não 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*[]
pode ser convertido parachar**&
na primeira amostra e não pode ser convertido na segunda amostra? Importa se o tamanho é conhecido em tempo de compilação?
EDIT: Eu acho que há 2 conversões necessárias no segundo caso, e apenas uma conversão implícita pode ser feita pelo compilador.
Este código compila bem:
void f(int&, char**&){}
int main()
{
int argc = 2;
char* temp[] = { "", "", nullptr };
char** argv = temp;
f(argc, argv);
return 0;
}