2009-11-18 18 views
42

¿Qué modismos de C++ deben saber los programadores de C++?¿Qué modismos de C++ deben usar los programadores de C++?

por C++ modismos, me refiero a los patrones de diseño o forma de hacer ciertas cosas que sólo son aplicables para C++ o más aplicable para C++ que la mayoría de otros idiomas.

por qué hay que utilizar las expresiones idiomáticas, y ¿qué cumplir con los idiomas?

+1

Cualquier cosa que sea aplicable a C++ es generalmente aplicable a otros lenguajes (porque C++ cubre una gran cantidad de diferentes estilos de programación). –

+6

¿Puedes hacer RAII y PIMPL en muchos otros idiomas? – Partial

+0

@Partial: RAII sí, es simplemente más natural en C++ que en la mayoría de los idiomas. –

Respuesta

27

Aquí está uno list. Si tuviera que escoger un par podría ir con el Patrón de Plantilla Curiosamente Recurrente o Contstructors Virtuales.

+3

+1 Me gusta la lista. –

+2

+1 Para la lista uber: P – Partial

+2

Lista excelente que a menudo consulto; sin embargo, la plantilla curiosamente recurrente sería muy baja en mi lista como algo que todo programador de C++ necesitaría saber. – Elemental

10

PIMPL, también conocido como P ointer a IMPL ementation?

+17

Yo personalmente lo odio. :/ – GManNickG

+0

Bueno, no tiene que usarlo en todas partes :) – Dmitry

+3

Técnicamente, no tiene _ para usarlo _en ninguna parte_. :-) –

54

Con mucho, el "patrón" más importante para aprender y saber que es (casi) exclusivo de C++ es RAII (La inicialización de la adquisición de recursos es).

Editar: (Para responder a una pregunta adicional editada en la pregunta). Utiliza RAII principalmente para (semi) automatizar la administración de recursos. El uso más obvio es liberar recursos propiedad de objetos cuando los objetos propietarios quedan fuera de alcance, como liberar memoria o cerrar archivos.

+30

+1. Desafortunadamente también el modismo con el peor nombre. –

+1

No me malinterpreten, es uno de los más importantes en C++, pero ni siquiera está cerca de ser exclusivo de C++. Aunque C++ lo ha hecho famoso. –

+4

Creo que no se trata de cosas que son exclusivas de C++; más bien, se trata de cosas que son excepcionalmente omnipresentes en C++; algo que no puedes realmente vivir sin saber, que posiblemente puedas en algunos otros idiomas. RAII definitivamente sería una cosa así. –

8

Metaprogramación de plantillas. Es genial porque básicamente se trata de mecanografía de pato en tiempo de compilación, por lo que se obtiene la mayor parte de la flexibilidad de la mecanografía de pato con la velocidad del tipado estático.

+1

no pato grabando? – Eric

+9

Los patos * no se pueden * pegar. – greyfade

+0

+1 para * pato escribiendo *. Siempre pienso que la tipificación de pato es la versión en tiempo de ejecución de SFINAE – Manu343726

7

Si desea obtener el máximo provecho de la STL continuación iteradores y funtores/objetos de función son expresiones esenciales. El uso de iteradores también se basa implícitamente en el modismo de 'medio campo abierto' también.

+0

¡Muy cierto! ¿Has oído hablar de constructores de secuencias y constructores de conversiones? – Partial

+0

¿Te refieres a 'iota()'? Otra omisión de la lista son los objetos generadores. –

+0

Para ser sincero, no estoy familiarizado con iota(), pero he publicado una respuesta con un ejemplo. – Partial

5

RAII, vaca, pimpl, Ley de Demeter (no sé si se puede clasificar como idioma), los rasgos y las políticas de tipo. (La VACA y la ley del demeter no se limitan a C++)

+0

Rasgos es algo que no he visto en ningún otro lado (pero, de nuevo, no he estado buscando tan duro). –

6

La explotación de Strong Typing y const la corrección también es extremadamente útil.

También prohíbo los constructores de copia predeterminados y los operadores de asignación. En realidad voy más allá, pero esos son los más comunes. Creo que la vida sería más fácil si no estuvieran implícitas.

Cuestiones relacionadas