Primární výrazy
Primární výrazy jsou stavebními bloky složitějších výrazů.Jsou to literály, názvy a názvy kvalifikovány operátorem rozsahu rozlišení (::). Primární výraz může mít některou z těchto forem:
literal
this
:: name
name
( expression )
Literál je konstantní primární výraz.Jeho typ závisí na formuláři specifikace.Úplné informace o zadávání literálů naleznete v tématu Litarály.
Toto klíčové slovo je ukazatel na objekt třídy.Je k dispozici v rámci funkce nestatického členu a odkazuje na instanci třídy, pro kterou byla funkce vyvolána.Toto klíčové slovo nesmí být použito mimo tělo funkce člena třídy.
Typ tohoto ukazatele je type***const** (kde type je název třídy) v rámci funkcí, které ne specificky upravují tento ukazatel.Následující příklad ukazuje deklarace členské funkce a typy tohoto:
// 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
};
Viz téma Typ tohoto ukazatele, kde se nacházejí další informace o změnách typu tohoto ukazatele.
Operátoru rozsahu rozlišení (::) následován názvem představuje primární výraz. Tyto názvy musí být jména v globálním rozsahu, ne názvy členů. Typ tohoto výrazu je určen deklarací názvu.Je to hodnota l (to znamená, že může být zobrazena na levé straně výrazu operátoru přiřazení), pokud je deklarující název hodnota l.Operátoru rozsahu rozlišení umožňuje odkazování na globální název, i když je tento název skrytý v aktuálním oboru.Viz Obor, kde se nachází příklad použití operátoru rozsahu rozlišení.
Výraz uzavřený do závorek je primární výraz, jehož typ a hodnota jsou stejné jako typ a hodnota výrazu bez závorek.Je to hodnota l, pokud je výraz bez závorek hodnota l.
V rámci výše uvedené primární syntaxe výrazu název znamená cokoliv v syntaxi popsané pro Názvy, i když při použití operátoru rozsahu rozlišení před názvem nejsou povoleny typy názvů, které se mohou vyskytnout pouze ve třídě. To zahrnuje názvy funkcí převodu definovaného uživatelem a názvy destruktorů.
Příklady primárních výrazů zahrnují:
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
Následující příklady jsou všechny považovány za názvy, a proto za primární výrazy v různých formách:
MyClass // a 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