Первичные выражения
Основные выражения являются стандартными блоками более сложных выражений. Это литералы, имена и имена, уточняемые с помощью оператора разрешения области действия (::). Основное выражение может иметь любую из следующих форм.
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