Resulta que char c[] = {"a"};
es completamente válido tanto en C++03 como en C++11.¿Por qué un inicializador que contiene una cadena literal es válido para inicializar una matriz `char`?
No me esperaba, porque es una matriz de char
no de char const*
, y esperaría que un inicializador de llaves requiera un tipo compatible para cada uno de sus "artículos". Tiene un artículo, y eso es un char const*
no un char
.
Entonces, ¿qué hace que esta inicialización sea válida? ¿Y hay una razón para que sea así?
mismo modo, char c[] = {"aa"};
recopila, y la impresión de c
resultados en la salida "aa
".
Me gustaría esperaba char c[]{"a"}
sea válida en C++ 11, por supuesto, pero no es lo mismo! Del mismo modo, char c[] = {'a'}
es obvio en ambos, como es char c[] = "a"
.
¿Has probado 'char c [] = {" aa "};'? –
@VJo: También válido. –
¿Por qué esperas que no sea válido? No está muy claro lo que estás preguntando. Es válido porque no hay ninguna regla que lo prohíba. ¿Qué regla esperas prohibir? – jalf