2011-07-21 14 views
41

Duplicar posibles:
Is excessive use of this in C++ a code smell
When should you use the "this" keyword in C++?
Is there any reason to use this->palabra "this" en C++

En C++, la palabra clave es "esto" por lo general omite? Por ejemplo:

Person::Person(int age) { 
    _age = age; 
} 

en contraposición a:

Person::Person(int age) { 
    this->_age = age; 
} 
+7

la mayoría de las personas lo usan cuando la variable que se pasa a la función tiene el mismo nombre que la variable de instancia ... –

Respuesta

65

Sí, no se requiere y generalmente se omite. Podría ser necesario para acceder a las variables después de que hayan sido anulado en el ámbito embargo:

Person::Person() { 
    int age; 
    this->age = 1; 
} 

Además, este:

Person::Person(int age) { 
    _age = age; 
} 

Es bastante mal estilo; si necesita un inicializador con el mismo nombre, use esta notación:

Person::Person(int age) : age(age) { } 
+4

No tengo idea de cómo se llama la última sintaxis, ¿podría darme alguna pista/información acerca de qué buscar para entender cómo funciona eso? – Stormsson

+9

@Stormsson [Listas de inicialización de miembros.] (Http://en.cppreference.com/w/cpp/language/initializer_list) – orlp

3

Para el caso del ejemplo anterior, se omite generalmente, sí. Sin embargo, de cualquier manera es sintácticamente correcto.

5

this apunta al objeto en cuya función miembro se indica, por lo que es opcional.

15

Es la preferencia del programador. Personalmente, me encanta usar this ya que marca explícitamente los miembros del objeto. Por supuesto, el _ hace lo mismo (solo cuando se sigue la convención)

+8

El guión bajo solo hace lo mismo si sigue la convención. –

+10

Usar 'this' para marcar explícitamente a los miembros del objeto también solo funciona cuando se sigue la convención. –

+2

Tenga en cuenta que "la convención" @Rich ha mencionado es utilizar un prefijo de subrayado para indicar los miembros del objeto. Cuando no sigue la convención, el parámetro del método tiene exactamente el mismo nombre que el miembro del objeto, y se requiere 'this' para evitar la ambigüedad. Pero creo que un 'esto' explícito '' funciona '' ya sea que sigas o no la convención. –

3

Sí. a menos que haya una ambigüedad.

También se usa a veces para evitar algunos compiladores que optimizan la llamada de función virtual.

+11

'o evite algunos compiladores que optimizan la llamada de función virtual', ¿cómo es eso? –

+0

Sí, explicar por favor? – Gerard

4

De cualquier manera funciona, pero muchos lugares tienen estándares de codificación que guiarán al desarrollador de una manera u otra. Si tal política no está en su lugar, simplemente sigue a tu corazón. Una cosa, sin embargo, REALMENTE ayuda a la legibilidad del código si lo usa. especialmente si no está siguiendo una convención de nomenclatura sobre nombres de variables de nivel de clase.

Cuestiones relacionadas