examples biblioteca array c++ arrays initialization c++11 curly-braces

c++ - biblioteca - Inicialización std:: array<T>



integer array c++ (1)

Una std::array<T> es esencialmente una matriz estilo C envuelta en una struct . La inicialización de struct s requiere llaves, y la inicialización de matrices también requiere llaves. Entonces necesito dos pares de llaves:

std::array<int, 5> a = {{1, 2, 3, 4, 5}};

Pero la mayor parte del código de ejemplo que he visto solo usa un par de llaves:

std::array<int, 5> b = {1, 2, 3, 4, 5};

¿Cómo es que esto está permitido y tiene algún beneficio o desventaja en comparación con el primer enfoque?


El beneficio es que tienes ... menos para escribir. Pero el inconveniente es que solo puede dejar llaves cuando la declaración tiene esa forma. Si deja el valor = , o si el conjunto es miembro y lo inicializa con el member{{1, 2, 3, 4, 5}} , no solo puede aprobar un par de llaves.

Esto se debe a que existían preocupaciones de posibles ambigüedades de sobrecarga cuando las llaves se pasan a las funciones, como en f({{1, 2, 3, 4, 5}}) . Pero causó cierta discusión y se generó un informe de problema.

Esencialmente, la inicialización = { ... } siempre ha podido omitir llaves, como en

int a[][2] = { 1, 2, 3, 4 };

Eso no es nuevo. Lo nuevo es que puede omitir el = , pero luego debe especificar todos los paréntesis

int a[][2]{ {1, 2}, {3, 4} };