Expresiones principales
Expresiones principales son los bloques de creación de expresiones más complejas.Son literales, nombres, y nombres calificados por el operador de resolución de ámbito (::).Una expresión primaria puede tener cualquiera de las formas:
literal
this
:: name
name
( expression )
Un literal es una expresión constante primaria.El tipo depende del formulario de la especificación.Vea literales para obtener información sobre cómo especificar literales.
La palabra clave de this es un puntero a un objeto de clase.Está disponible en las funciones y de puntos miembro no estática a la instancia de la clase para la que la función se invoca.La palabra clave de this no se puede utilizar fuera del cuerpo de una función miembro de clase.
El tipo de puntero de this es type *const (donde es el nombre de clase type ) en las funciones que modifican no específicamente el puntero de this .El ejemplo siguiente muestra declaraciones de función miembro y los tipos de this:
// expre_Primary_Expressions.cpp
// compile with: /LD
class Example
{
public:
void Func(); // * const this
void Func() const; // const * const this
void Func() volatile; // volatile * const this
};
Vea tipo de este puntero para obtener más información sobre la modificación del tipo de puntero de this .
El operador de resolución de ámbito (::) seguido por un nombre constituye una expresión primaria.tales nombres deben ser nombres en el ámbito global, no nombres de miembro.La declaración de nombre determina el tipo de esta expresión.Es un valor l (es decir, puede aparecer en el lado izquierdo de una expresión de operador de asignación) si el nombre que declara es un valor l.El operador de resolución de ámbito permite que un nombre global es denominado, aunque ese nombre se oculta en el ámbito actual.Vea ámbito para obtener un ejemplo de cómo utilizar el operador de resolución de ámbito.
Una expresión delimitada entre paréntesis es una expresión principal cuyo tipo y valor es idéntico al de la expresión unparenthesized.Es un valor l si la expresión unparenthesized es un valor l.
En el contexto de la sintaxis de la expresión primaria determinada anterior, el nombre significa nada en la sintaxis descrita para nombres, aunque cuando se utiliza el operador de resolución de ámbito antes del nombre, no se permite a los tipos de nombres que pueden aparecer sólo en una clase.Esto incluye nombres de función de conversión definida por el usuario, y los nombres del destructor.
Ejemplos de inclusión primaria de las expresiones:
100 // literal
'c' // literal
this // in a member function, a pointer to the class instance
::func // a global function
::operator + // an global operator function
::A::B // a global qualified name
( i + 1 ) // a parenthesized expression
Los ejemplos siguientes son todos los nombresen, y por consiguiente expresiones primarias, diferentes formas:
MyClass // a identifier
MyClass::f // a qualified name
operator = // an operator function name
operator char* // an converstion operator function name
~MyClass // a destructor name
A::B // a qualified name
A<int> // a template id