variable una tipos sintaxis significado que para ejemplos definicion declarar declaracion datos c++ coding-style casting

una - tipos de datos en c++



Estilos de sintaxis moldeados de C++ (10)

Actualmente usamos moldes de estilo C en todas partes. Hice la otra pregunta de lanzamiento , y ahora veo la ventaja de usar static_cast en su lugar, aunque solo sea "greppable" (me gusta ese término). Probablemente comenzaré a usar eso.

No me gusta el estilo C ++; se parece demasiado a una llamada de función.

Una pregunta relacionada con el lanzamiento regular frente a static_cast vs. dynamic_cast :

¿Qué estilo de sintaxis de molde prefieres en C ++?

  • Sintaxis de conversión estilo C: (int)foo
  • Sintaxis de estilo de C ++: static_cast<int>(foo)
  • sintaxis del constructor: int(foo)

Puede que no traduzcan exactamente las mismas instrucciones (¿verdad?), Pero su efecto debería ser el mismo (¿no?).

Si solo está alternando entre los tipos numéricos integrados, encuentro que la sintaxis del molde de estilo C ++ es demasiado detallada. Como antiguo codificador de Java, suelo usar la sintaxis del estilo C en su lugar, pero mi gurú local de C ++ insiste en usar la sintaxis del constructor.

¿Qué piensas?


Con respecto a este tema, estoy siguiendo las recomendaciones de Scott Meyers ( CTS más eficaz , artículo 2: Prefiere modelos de estilo C ++).

Estoy de acuerdo en que el estilo de C ++ es detallado, pero eso es lo que me gusta de ellos: son muy fáciles de detectar, y hacen que el código sea más fácil de leer (que es más importante que escribir).

También te obligan a pensar qué clase de elenco necesitas y a elegir el correcto, reduciendo el riesgo de errores. También lo ayudarán a detectar errores en tiempo de compilación en lugar de en tiempo de ejecución.


De acuerdo con Stroustrup :

Los "modelos nuevos" se introdujeron para dar a los programadores la oportunidad de expresar sus intenciones con mayor claridad y para que el compilador capte más errores.

Así que, en realidad, es por seguridad, ya que hace una verificación adicional en tiempo de compilación.


Definitivamente estilo C ++. La escritura adicional te ayudará a evitar el lanzamiento cuando no deberías :-)


Elenco estilo C es la peor forma de hacerlo. Es más difícil de ver, no se puede fusionar, combina diferentes acciones que no deberían fusionarse, y no puede hacer todo lo que pueden hacer las versiones de C ++. Realmente deberían haber eliminado los moldes estilo C del idioma.


La sintaxis del constructor C ++ es OO, existen constructores, los uso. Si siente la necesidad de anotar estos códigos de conversión, debe hacerlo para cada tipo, no solo para los integrados. Tal vez use la palabra clave "explícita" para los generadores de conversión, pero la sintaxis del cliente imita exactamente lo que hace la sintaxis del ctor para los tipos incorporados. Ser greppable, eso puede ser cierto, pero qué gran sorpresa es que escribir más caracteres hace que las búsquedas sean fáciles. ¿Por qué tratar estos como especiales? Si está escribiendo fórmulas matemáticas con muchos int / unsigned / ... ay desde double / float - graphics - y necesita escribir un static_cast cada vez, el aspecto de la fórmula se llena y es muy ilegible. Y es una batalla cuesta arriba de todos modos, ya que muchas veces se convertirá sin siquiera darse cuenta de que lo es. Para los emisores descendentes uso el staticcast como, por supuesto, no existe el ctor por defecto que haría eso.


Lo mejor es nunca usar moldes de estilo C por tres razones principales:

  • como ya se mencionó, no se realiza ninguna comprobación aquí. El programador simplemente no puede saber cuál de los varios moldes se usa, lo que debilita el tipado fuerte
  • los nuevos moldes son intencionalmente impactantes visualmente. Como los moldes a menudo revelan una debilidad en el código, se argumenta que hacer moldes visibles en el código es algo bueno.
  • esto es especialmente cierto si se buscan moldes con una herramienta automatizada. Encontrar modelos de estilo C confiablemente es casi imposible.

Como señaló palm3D:

Encuentro la sintaxis de molde de estilo C ++ demasiado verbosa.

Esto es intencional, por las razones dadas anteriormente.

La sintaxis del constructor (nombre oficial: fundido de estilo de función) es semánticamente la misma que la del estilo C y también debe evitarse (excepto por las inicializaciones de variable en la declaración) por los mismos motivos. Es discutible si esto debería ser cierto incluso para los tipos que definen constructores personalizados, pero en C ++ efectivo, Meyers sostiene que incluso en esos casos, debe abstenerse de usarlos. Para ilustrar:

void f(auto_ptr<int> x); f(static_cast<auto_ptr<int> >(new int(5))); // GOOD f(auto_ptr<int>(new int(5)); // BAD

El static_cast aquí realmente llamará al constructor auto_ptr .


Sintaxis de estilo C, no verifique el error. Sintaxis de estilo C ++, realiza algunas comprobaciones. Al usar static_cast, incluso si no funciona, al menos sabrá que debe tener cuidado aquí.


Vaya por el estilo C ++ y, en el peor de los casos, los fragmentos de código verbosos feos que comprendieron el encasillado explícito de C ++ serán un recordatorio constante de lo que todos sabemos (es decir, el casting explícito es malo - el plomo en la acuñación de improperios). No vaya con el estilo C ++ si desea dominar la técnica de seguimiento de errores de tiempo de ejecución.


Yo uso static_cast por dos razones.

  1. Está explícitamente claro lo que está sucediendo. No puedo leer sobre eso sin darme cuenta de que hay un elenco pasando. Con moldes de estilo C su ojo puede pasar sin pausa.
  2. Es fácil buscar cada lugar en mi código donde estoy haciendo el casting.