Compartir a través de


Bienvenido a C++ (C++ moderno)

C++ es uno de los lenguajes de programación más utilizados universal.Los programas bien escritos de C++ son rápidos y eficaces.El lenguaje es más flexible que otros lenguajes porque puede utilizarlo para crear una amplia gama de aplicación- de fun y juegos emocionantes, el software científico de alto rendimiento, controladores de dispositivos, los programas insertados, y a las aplicaciones de cliente de Windows.Para más de 20 años, C++ utilizada para resolver problemas como éstos y muchos otros.Lo que es posible que no conozca es que un número que aumente de programadores de C++ ha plegado encima de la programación desaliñada de estilo C de ayer y haber título C++ moderno en su lugar.

Uno de los requisitos originales para C++ era compatibilidad con el lenguaje C.Desde entonces, C++ se ha desarrollado con varias iteraciones - c con clases, la especificación del lenguaje original de C++, y luego las muchas mejoras subsiguientes.Debido a esta herencia, C++ se conoce a menudo como lenguaje de programación multiparadigma.En C++, puede realizar la programación puramente de procedimiento de estilo C que contiene punteros sin formato, las matrices, cadenas de caracteres terminada en null, las estructuras de datos personalizadas, y otras características que pueden habilitar gran rendimiento pero también todos los generar errores y complejidad.Dado que la programación de estilo C se carga con peligros como éstos, uno de los objetivos de base para C++ era que los programas tipo- seguros y más fáciles de escribir, extiende, y mantiene.Al principio, C++ abrazó paradigmas de programación como programación orientada a objetos.Durante los años, las características se han agregado al lenguaje, así como las bibliotecas estándar alto- prueban de estructuras de datos y de algoritmos.Es estas adiciones realizadas el estilo moderno de C++ posible.

C++ moderno resalta:

  • Ámbito Pila- basado en lugar de la pila o de ámbito global estático.

  • Inferencia de tipo auto en lugar de nombres de tipo explícito.

  • Punteros inteligentes en lugar de punteros sin formato.

  • std::string y tipos de std::wstring (vea <string>) en lugar de matrices sin formato de char[].

  • los contenedores de Biblioteca de plantillas estándar (STL) tienen como de vector, de list, y de map en lugar de matrices sin formato o de los contenedores personalizados.Vea <vector>, <list> y <map>.

  • Algoritmos de STL en lugar manualmente codificados.

  • Excepciones, informes y controlar las condiciones de error.

  • Comunicación Bloqueo- libre de inter- subproceso utilizando STL std::atomic<> (vea <atomic>) en lugar de otros mecanismos de comunicación de inter- subproceso.

  • funciones lambda escrito en lugar de las funciones pequeñas implementadas por separado.

  • Intervalo- basado para que bucles escribir bucles más eficaces que funcionan con matrices, contenedores STL, y las colecciones de Windows en tiempo de ejecución en el formulario for (for-range-declaration :expression ).Esto forma parte del lenguaje básica.Para obtener más información, vea Instrucción for basada en intervalo (C++).

El lenguaje propio de C++ también se ha desarrollado.Compare los fragmentos de código.Esto muestra cómo las cosas estaban en C++:

// circle and shape are user-defined types
circle* p = new circle( 42 ); 
vector<shape*> v = load_shapes();

for( vector<circle*>::iterator i = v.begin(); i != v.end(); ++i ) {
    if( *i && **i == *p )
        cout << **i << “ is a match\n”;
}

for( vector<circle*>::iterator i = v.begin();
        i != v.end(); ++i ) {
    delete *i; // not exception safe
}

delete p;

Aquí es cómo lo mismo logra en C++ moderno:

#include <memory>
#include <vector>
// ...
// circle and shape are user-defined types
auto p = make_shared<circle>( 42 );
vector<shared_ptr<shape>> v = load_shapes();

for_each( begin(v), end(v), [&]( const shared_ptr<shape>& s ) {
    if( s && *s == *p )
        cout << *s << " is a match\n";
} );

En C++ moderno, no tiene que utilizar nuevo/eliminación o la excepción explícita que administra porque puede utilizar los punteros inteligentes en su lugar.Cuando se utiliza auto escriba la deducción y función lambda, puede escribir código más rapidez, lo aprieta, y lo entiende mejor.Y for_each es el producto de limpieza de discos, más fácil de usar, y errores imprevistos menos propenso que un bucle de for.Puede utilizar la plancha de caldera junto con las líneas de código mínimas para escribir la aplicación.Y puede hacer que el código excepción- seguro y desplazarlo seguro, y no tiene ninguna asignación y desasignación o código de error a tratar.

C++ moderno incorpora dos clases de polimorfismo: tiempo de compilación, con plantillas, y tiempo de ejecución, con herencia y la virtualización.Puede mezclar las dos clases de polimorfismo el gran efecto.La plantilla shared_ptr STL utiliza métodos virtuales internos para lograr el borradura aparentemente sin esfuerzo de tipo.Pero no utilice demasiado la virtualización para el polimorfismo cuando una plantilla es la mejor opción.Las plantillas pueden ser muy eficaces.

Si está procede a C++ en otro lenguaje, especialmente de un lenguaje administrado en el que la mayoría de los tipos son tipos de referencia y muy pocos son tipos de valor, sabe que las clases de C++ son tipos de valor de forma predeterminada.Pero se pueden especificar como tipos de referencia para habilitar el comportamiento polimórfico que admite la programación orientada a objetos.Una perspectiva útil: los tipos de valor son más sobre la memoria y el control de diseño, tipos de referencia es más sobre las clases base y las funciones virtuales para admitir el polimorfismo.De forma predeterminada, los tipos de valor son copyable- ellos que cada uno tiene un constructor de copias y un operador de asignación de copia.Cuando se especifica un tipo de referencia, crea la no-copyable- deshabilitar de clase el constructor de copias y la asignación de copia operador- y utiliza un destructor virtual, que admite el polimorfismo.Los tipos de valor están también sobre el contenido, que, cuando los copian, proporcionan dos valores independientes que puede modificar por separado.Pero los tipos de referencia se acerca a identidad- qué algún hace referencia al objeto que ser- y por eso a veces como tipos polimórficos.

C++ está experimentando un renacimiento porque la eficacia es un rey de nuevo.Los lenguajes como Java y C# son buenos cuando la productividad del programador es importante, pero aparecen sus limitaciones cuando la eficacia y el rendimiento son supremos.Para aumentar la eficacia alta y eficacia, especialmente en los dispositivos que limitado el hardware, nada alcanza C++ moderno.

No solo el lenguaje es moderno, las herramientas de desarrollo es, también.Visual Studio crea todas las partes del ciclo de desarrollo robustas y eficaces.Incluye herramientas de (ALM) de administración del ciclo de vida de la aplicación, las mejoras del IDE como IntelliSense, los mecanismos herramienta- fáciles de usar como XAML, y compilar, depurar, y muchas otras herramientas.

Los casos en esta parte de la documentación proporcionan instrucciones y procedimientos recomendados para las características más importantes y técnicas de alto nivel para escribir programas modernos de C++.

Vea también

Referencia

Expresiones lambda en C++

Otros recursos

Referencia del lenguaje C++

Referencia de la biblioteca estándar de C++