variable que objetos objeto miembros funciones funcion estaticos estaticas estatica ejemplos c++ c++11 language-lawyer

c++ - que - Tipo de `esto` en la función miembro estática?



variable static c (1)

El lenguaje en el estándar se puede remontar a n3282 , que es una resolución para los defectos 1207 y 1017 . En particular, el lenguaje aparece en la resolución propuesta para el defecto 1207, y por lo tanto debe considerarse en el contexto de la norma tal como estaba en el momento en que se abordó el defecto. En ese momento existía cierta preocupación sobre la reescritura de las expresiones id en las expresiones de acceso de los miembros usando *this (9.3.1p3), en particular en el contexto de las declaraciones de tipo return-return-type (véase el número 945 ).

Si comparamos la resolución propuesta con el defecto 1207 con el lenguaje eventual en n3282 y posteriormente en el estándar, hay una diferencia significativa con respecto a 9.3.1p3:

Defecto 1207:

Cuando una expresión-id (5.1 [expr.prim]) que no es parte de la sintaxis de acceso de un miembro de la clase (5.2.5 [expr.ref]) y no se usa para formar un puntero al miembro (5.3.1 [expr.unary] .op]) se usa en la declaración de una función miembro de la clase X , si la búsqueda del nombre (3.4 [basic.lookup]) resuelve el nombre ...

n3282 y C ++ 11:

Cuando una expresión-id (5.1 [expr.prim]) que no es parte de la sintaxis de acceso de un miembro de la clase (5.2.5 [expr.ref]) y no se usa para formar un puntero al miembro (5.3.1 [expr.unary] .op]) se usa en un miembro de la clase X en un contexto donde se puede usar (5.1.1 [expr.prim.general]) , si la búsqueda de nombres (3.4 [basic.lookup]) resuelve el nombre [.. .]

Es evidente que la resolución propuesta para el defecto 1207 conlleva la creencia de que las expresiones id (para un miembro estático) dentro de las funciones miembro estáticas necesitarían transformarse a *this expresiones de acceso miembro y, por lo tanto, necesitarían acceso al tipo y categoría de valor de this En el momento n3282 se escribió que esto se había resuelto a favor de la transformación id calificado (también 9.3.1p3) que no requiere this , pero el lenguaje en 5.1.1p3 permaneció vestigialmente.

Recomendaría plantear este problema en el grupo de discusión de estándares de C ++; es posible que se elimine el lenguaje vestigial editorialmente.

En C ++ 5.1.1 / 3 [expr.prim.general] dice:

La categoría de tipo y valor [de this ] se define dentro de una función miembro estática.

¿Qué significa esto? ¿Cómo es relevante?

Tenga en cuenta que:

this no debe aparecer en la declaración de una función miembro estática