vectores una resueltos programacion matriz matrices llenar imprimir ejercicios ejemplos codigo caracteres arreglos c++ c++14 dynamic-arrays dynarray

una - ¿Por qué ambas matrices del tamaño del tiempo de ejecución y std:: dynarray en C++ 14?



matriz en c++ codigo (3)

Como dijo usted mismo, std::dynarray proporcionará una interfaz de estilo STL, lo que lo hace más idiomático de usar. Aún así, C ++ necesita matrices dinámicas creadas con new[] para:

  1. al menos implemente std::dynarray (para que no pueda tener dynarray sin new [])
  2. retener compatibilidad con versiones anteriores

No puede simplemente decir que todo el código, que usa new [], ahora es incorrecto.

En general, la diferencia entre C ++ 14 std::dynarray y C ++ new[] array es casi la misma que entre C ++ 11 std::array y C-style arrays.

UPD: Ahora veo que ahora está preguntando por características similares a C11 (VLA). En realidad, no hay nada que ver con eso: los VLA son muy limitados y solo puede usar un argumento de la función como su tamaño de matriz. Además, la memoria se asigna en la pila, pero para la memoria std::dynarray se asigna en el montón. Básicamente, esta característica simplemente amplía las matrices estilo C y hace que C ++ sea un poco más compatible con el estándar C moderno.

El borrador de C ++ 14 incluye matrices del tamaño del tiempo de ejecución y el contenedor std::dynarray . Por lo que puedo decir, la única diferencia real entre los dos es que std::dynarray tiene una interfaz STL (por ejemplo, begin , end , size , etc.), mientras que las matrices de tamaño de tiempo de ejecución no lo hacen. Entonces, ¿por qué C ++ 14 los necesita a ambos?

Entiendo que las matrices del tamaño de tiempo de ejecución son parte del lenguaje central, mientras que std::dynarray es parte de la biblioteca estándar, pero la propuesta de std::dynarray deja en claro que los autores esperan que los compiladores, en muchos casos, ofrezcan soporte especial para std::dynarray para que pueda ser lo más eficiente posible, es decir, tan eficiente como una matriz del tamaño del tiempo de ejecución. Como tal, la distinción lenguaje / biblioteca parece algo artificial.

Entonces, de nuevo, ¿por qué C ++ 14 necesita arreglos del tamaño del tiempo de ejecución y std::dynarray ? Y dado que std::dynarray tiene una interfaz más rica (STLified), ¿por qué no simplemente descartar matrices del tamaño de la ejecución, suponiendo que std::dynarray se puede implementar con la misma eficacia de tiempo de ejecución?

Aclaración

Cuando hablo de "matrices de tamaño de tiempo de ejecución", me refiero a una nueva característica de lenguaje central C ++ 14 que se describe en N3639 , no a arrays C tradicionales o VLA ni nada en C ++ 11.


Creo que usted respondió la pregunta usted mismo, std::dynarray tiene la interfaz stl. Un objetivo de c ++ 11 y supongo que c ++ 14 es hacer que c ++ sea más fácil de usar, menos propenso a errores y más fácil para los principiantes. Con las matrices de estilo c, puede encontrarse con problemas aritméticos de puntero, pero dynarray evita los problemas si se usa como estaba previsto.
EDITAR: por lo que parece que una diferencia es que las matrices del tamaño del tiempo de ejecución deben asignarse en la pila, lo que aumenta la probabilidad de un desbordamiento de la pila. dynarray se asigna en el montón aunque es posible asignar en la pila (si la implementación lo hizo)


N3639 propone agregar matrices locales del tamaño del tiempo de ejecución con una duración de almacenamiento automática en C ++.

N2648 dice que de acuerdo con la práctica de C ++, std::dynarray s se puede usar con más que solo variables automáticas. Pero para aprovechar la asignación de la pila de eficiencia, deseamos que dynarray optimizable cuando se usa como una variable automática.

En resumen, las matrices de tamaño de tiempo de ejecución C11 están restringidas para ser almacenadas en la pila. dynarray no lo es, pero puede optimizarse cuando se almacena en la pila para que sea tan eficiente como las matrices de tamaño de tiempo de ejecución C11 (o al menos así es el objetivo).

Las matrices de tamaño de tiempo de ejecución C11 pueden ser una sintaxis útil, y el costo para aumentar la intercomunicación con C no es alto: el mecanismo tendría que implementarse para un dynarray automático eficiente de dynarray modos. Además, las matrices de tamaño de tiempo de ejecución C11 son ciudadanos de primera clase, y existen independientemente del uso de bibliotecas std por el programador.

Existen diferencias importantes entre las matrices reales del tamaño del tiempo de ejecución C11 y las matrices del tamaño del tiempo de ejecución C ++ 1y C11, entre ellas, el tamaño del tiempo de ejecución que admiten las matrices reales del tamaño del tiempo de ejecución C11. Pero su uso básico puede ser compatible.

Tenga en cuenta que, al final, ninguno de los dos se agregó en C ++ 14.