Compartilhar via


Expressões primárias

As expressões primárias são os blocos de construção de expressões mais complexas. Elas são literais, nomes e nomes qualificados pelo operador de resolução de escopo (::). Uma expressão primária pode ter qualquer uma das seguintes formas:

primary-expression
literal
this
name
:: name ( expression )

Um literal é uma expressão primária constante. Seu tipo depende da forma de sua especificação. Para obter mais informações sobre como especificar literais, confira Literais.

O teclado this é um ponteiro para uma instância da classe. Ela está disponível nas funções membro não estáticas e aponta para a instância da classe na qual a função foi invocada. A palavra-chave this não pode ser usada fora do corpo de uma função membro de classe.

Para obter mais informações sobre o tipo do ponteiro this, confirathis ponteiro.

O operador de resolução de escopo (::) seguido por um nome é uma expressão primária. Tais nomes devem estar no escopo global, não em nomes de membro. A declaração do nome determina o tipo da expressão. Será um l-value (isto é, pode aparecer à esquerda de uma expressão de atribuição) se o nome declarativo for um l-value. O operador de resolução de escopo permite que um nome global seja referenciado, mesmo se esse nome estiver oculto no escopo atual. Confira Escopo para obter um exemplo de como usar o operador de resolução de escopo.

Uma expressão entre parênteses é uma expressão primária. Seu tipo e seu valor são idênticos ao tipo e ao valor da expressão que não está entre parênteses. Será um l-value se a expressão fora dos parênteses for um l-value.

Os exemplos de expressões primárias incluem:

100 // literal
'c' // literal
this // in a member function, a pointer to the class instance
::func // a global function
::operator + // a global operator function
::A::B // a global qualified name
( i + 1 ) // a parenthesized expression

Estes exemplos são todos considerados names, portanto, expressões primárias, em vários formulários:

MyClass // an identifier
MyClass::f // a qualified name
operator = // an operator function name
operator char* // a conversion operator function name
~MyClass // a destructor name
A::B   // a qualified name
A<int> // a template id

Confira também

Tipos de expressões