主要表达式
主表达式是更复杂的表达式的构造块。 它们是文本、名称以及范围解析运算符 (::) 限定的名称。主表达式可以具有以下任一形式:
literal
this
:: name
name
( expression )
literal 是常量主表达式。 其类型取决于其规范的形式。 有关指定文本的完整信息,请参阅文本。
this 关键字是指向类对象的指针。 它在非静态成员函数中可用,并指向为其调用函数的类的实例。 this 关键字只能在类成员函数体的外部使用。
this 指针的类型是未特别修改 this 指针的函数中的 type *const(其中 type 是类名)。 以下示例演示成员函数声明以及 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 指针的类型。
范围解析运算符 (::) 后跟名称构成了主表达式。此类名称必须是全局范围内的名称,而不是成员名称。此表达式的类型由名称的声明决定。 如果声明的名称是左值,则该类型是左值(即,它可以出现在赋值运算符表达式的左侧)。 范围解析运算符允许引用全局名称,即使该名称隐藏在当前范围中也如此。 有关如何使用范围解析运算符的示例,请参阅范围。
用括号括起的表达式是与不带括号的表达式具有相同的类型和值的主表达式。 如果不带括号的表达式是左值,则用括号括起的表达式也是左值。
在上面给出的主表达式语法的上下文中,name 表示为 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