utilizan usa son sirve qué que programacion para los implementar destructores definicion constructores como c++ naming-conventions member c++-faq underscores

usa - Siguiendo los guiones bajos para las variables miembro en C++



que son los constructores en c (7)

He visto a gente usar un guión bajo final para las variables miembro en las clases, por ejemplo, en el famoso C ++ FAQ Lite .

Creo que su propósito no es marcar variables como miembros, para eso es "m_". Su propósito real es hacer posible tener un método de acceso nombrado como el campo, como este:

class Foo { public: bar the_bar() { return the_bar_; } private: bar the_bar_; }

Tener accesores omitir la parte "get_" es común en el STL y aumentar, y estoy tratando de desarrollar un estilo de codificación lo más cercano posible a estos, pero realmente no puedo verlos usando el truco de subrayado. No pude encontrar un descriptor de acceso en STL o boost que simplemente devolviera una variable privada.

Tengo algunas preguntas que espero que puedas contestar:

  1. ¿De dónde viene esta convención? ¿Charla? ¿C objetivo? Microsoft? Me pregunto.
  2. ¿Usaría el guión bajo final para todos los miembros privados o solo como una solución en caso de que quiera nombrar una función como una variable?
  3. ¿Puede indicarme STL o aumentar el código que demuestre los caracteres de subrayado finales para las variables miembro?
  4. ¿Alguien sabe cuáles son las opiniones de Stroustrup sobre el tema?
  5. ¿Me puede indicar una discusión adicional sobre el tema?

Como desarrollador de mantenimiento que le gusta buscar, me inclino por m_ ya que es más fácil de buscar. Cuando tú, como yo, estamos manteniendo grandes proyectos con clases grandes (no preguntes) a veces te preguntas: "Hmmm, ¿quién muta el estado?". Una búsqueda rápida de m_ puede dar una pista.

También se sabe que uso l_ para indicar variables locales, pero el proyecto actual no usa eso, así que estoy "limpio" en estos días.

No soy fanático de la notación húngara. C ++ tiene un sistema de tipo fuerte, yo uso eso en su lugar.


En C ++,

  1. identificadores que comienzan con un guión bajo, seguido de un carácter de mayúscula
  2. identificadores que tienen dos caracteres de subrayado consecutivos en cualquier lugar
  3. identificadores en el espacio de nombres global comenzando con un guión bajo

están reservados a la implementación. (Puede encontrar más sobre esto here .) En lugar de tratar de recordar estas reglas, muchas simplemente no usan identificadores que comiencen con un guión bajo. Es por eso que el guión bajo final fue inventado.
Sin embargo, C ++ en sí mismo es antiguo y se basa en 40 años de C, ninguno de los cuales tenía una sola compañía detrás, y una biblioteca estándar que ha "crecido" durante varias décadas, en lugar de crearse en un solo acto de creación. . Esto hace que existan muchas convenciones de nomenclatura diferentes. El guión bajo finalizado para partes privadas (o solo para datos privados) no es más que uno, muchos usan otros (no pocos entre ellos argumentando que, si necesita guiones bajos para informar a los miembros privados de las variables locales, su código no es lo suficientemente claro).

En cuanto a getters / setters, son una abominación, y una señal segura de " cuasi clases " , que odio.


He leído The C ++ Programming Language y Stroustrup no usa ningún tipo de convención para nombrar miembros. Él nunca necesita hacerlo; no hay un único acceso / mutador simple, tiene una forma de crear diseños muy finos orientados a objetos por lo que no es necesario tener un método del mismo nombre. Utiliza estructuras con miembros públicos cada vez que necesita estructuras de datos simples. Sus métodos siempre parecen ser operaciones . También leí en alguna parte que él desalienta el uso de nombres que difieren solo en un personaje.


Personalmente soy un gran admirador de esta guía: http://geosoft.no/development/cppstyle.html

Incluye omitir el prefijo m_, usar un sufijo de subrayado para indicar las variables de miembros privados y eliminar el hábito horrible e irritante de usar guiones bajos en lugar de espacio, y otras sugerencias más detalladas y específicas, como nombrar los booleos de manera apropiada ( isDone en lugar de simplemente done ) y usar getVariable() lugar de simplemente variable() para nombrar unos pocos.


Por lo que recuerdo, no es Microsoft el que empujó el estilo de código de subrayado final para los miembros.

He leído que Stroustrup es pro el subrayado final.


Solo hablando por mí mismo ... siempre utilizo el guión bajo final para los miembros de datos privados, independientemente de si tienen funciones de acceso o no. No uso m_ principalmente porque se mete en el camino cuando deletreo mentalmente el nombre de la variable.


Supongo que la utopía habría sido utilizar un guión bajo inicial, esto es bastante común en Java y C # para los miembros.

Sin embargo, para C, los guiones bajos principales no son una buena idea, por lo tanto, supongo que la recomendación de C ++ FAQ Lite de seguir el guión bajo:

Todos los identificadores que comienzan con un guión bajo y una letra mayúscula u otro guión bajo siempre están reservados para cualquier uso.

Todos los identificadores que comienzan con un guión bajo siempre están reservados para su uso como identificadores con alcance de archivo en los espacios de nombre ordinario y de nombre de etiqueta.

(Especificación ISO C99, sección 7.1.3)