Wyrażenia podstawowe
Wyrażenia podstawowe są blokami konstrukcyjnymi bardziej złożonych wyrażeń.Są to literały, nazwy i nazwy kwalifikowane przez operator rozpoznawania zakresu (::). Wyrażenie podstawowe może mieć jedną z następujących form:
literal
this
:: name
name
( expression )
Literał jest podstawowym wyrażeniem stałym.Jego typ zależy od postaci jego specyfikacji.Zobacz literały, aby uzyskać wyczerpujące informacje na temat określania literałów.
Słowo kluczowe this jest wskaźnikiem do obiektu klasy.Jest on dostępny w ramach funkcji niestatycznego elementu członkowskiego i wskazuje na wystąpienie klasy, dla której wywołano funkcję.Słowa kluczowego this nie można użyć poza ciałem funkcji elementu członkowskiego klasy.
Typ wskaźnika this to type *const (gdzie type jest nazwą klasy) w funkcjach, które nie modyfikują szczególnie wskaźnika this.W poniższym przykładzie pokazano deklaracje funkcji elementów członkowskich i typy 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
};
Zobacz Typ wskaźnika this, aby uzyskać więcej informacji o modyfikowaniu typu wskaźnika this.
Operator rozpoznawania zakresu (::), po którym następuje nazwa, stanowi wyrażenie podstawowe. Nazwy te muszą być nazwami w zakresie globalnym, a nie nazwami elementów członkowskich. Typ tego wyrażenia zależy od deklaracji nazwy.Jest to wartość l (to znaczy, że może być wyświetlany na lewej stronie wyrażenia operatora przypisania), jeśli nazwa deklarująca to wartość l.Operator rozpoznawania zakresu umożliwia odwoływanie się do globalnej nazwy, nawet jeśli ta nazwa jest ukryta w bieżącym zakresie.Zobacz Zakres, aby uzyskać przykład, jak używać operatora rozpoznawania zakresu.
Wyrażenie w nawiasach jest wyrażeniem podstawowym, którego typ i wartość są identyczne jak wyrażenia bez nawiasów.Jest to wartość l, jeśli wyrażenie bez nawiasów jest wartością l.
W kontekście składni wyrażenia podstawowego podanej powyżej, nazwa oznacza cokolwiek w składni opisane dla nazw, choć w przypadku użycia operatora rozpoznawania zakresu przed nazwą, typy nazw, które mogą występować tylko w klasie, nie są dozwolone. Obejmuje to zdefiniowane przez użytkownika nazwy funkcji konwersji i nazwy destruktorów.
Przykłady wyrażeń podstawowych:
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
Wszystkie poniższe przykłady są uznawane jako nazwy, a więc wyrażenia podstawowe, w różnych formach:
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