Sdílet prostřednictvím


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

Viz také

Referenční dokumentace

Typy výrazů