Поделиться через


Первичные выражения

Основные выражения являются стандартными блоками более сложных выражений. Это литералы, имена и имена, уточняемые с помощью оператора разрешения области действия (::). Основное выражение может иметь любую из следующих форм.

literal 
this
:: name 
name  
( expression )

Параметр literal — это основное константное выражение. Его тип зависит от формы его спецификации. Дополнительные сведения об определении литералов см. в разделе Литералы.

Ключевое слово this — это указатель на объект класса. Он доступен в нестатических функциях-членах и указывает на экземпляр класса, для которого была вызвана функция. Ключевое слово this можно использовать только в теле функции-члена класса.

Типом указателя this является type *const (где type — это имя класса) внутри функций, не изменяющих указатель this определенным образом. В следующем примере показаны объявления функций-членов и типы указателя 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
};

Дополнительные сведения об изменении типа указателя this см. в разделе Тип указателя this.

Оператор разрешения области действия (::), за которым следует имя, составляет основное выражение. Такие имена должны быть именами в глобальной области, а не именами членов. Тип данного выражения определяется с помощью объявления имени. Это l-значение (то есть оно может отображаться слева от выражения оператора присваивания), если объявляющее имя является l-значением. Оператор разрешения области действия позволяет ссылаться на глобальное имя, даже если это имя скрыто в текущей области. См. пример использования оператора разрешения области действия в разделе Область.

Выражение, заключенное в круглые скобки, является основным выражением, тип и значение которого идентичны типу и значению выражения, не заключенного в круглые скобки. Это l-значение, если выражение, не заключенное в круглые скобки, является l-значением.

В контексте синтаксиса основного выражения, указанного выше, name означает любой элемент в синтаксисе, как описано в разделе Имена, хотя при использовании оператора разрешения области действия перед именем типы имен, которые могут возникать только в классе, недопустимы. К ним относятся имена функций пользовательского преобразования и имена деструкторов.

Ниже приводятся примеры основных выражений.

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

Во всех примерах ниже используется параметр name, поэтому они являются основными выражениями, представленными в различных формах.

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

См. также

Ссылки

Типы выражений