原始式
基本式は、より複雑な式のビルド ブロックです。 つまり、リテラル、名前、スコープ解決演算子 (::) で修飾された名前です。 基本式は次のいずれかの形式になります。
primary-expression
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ポインタ」を参照してください。
名前の前のスコープ解決演算子 (::) は基本式です。 そのような名前は、メンバー名ではなく、グローバル スコープでの名前であることが必要です。 式の型は名前の宣言によって決まります。 宣言名が左辺値である場合は、左辺値 (代入式の左辺になる式) です。 スコープ解決演算子を使用すると、グローバル名が現在のスコープでは隠されていても、その名前を参照できます。 スコープ解決演算子の使用例については、「スコープ」を参照してください。
かっこで囲まれた式は、プライマリ式です。 その型と値は、解析されていない式の型と値と同じです。 この式は、かっこで囲まれていない式が左辺値であれば、左辺値です。
次に示しているのは、基本式の例です。
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 // an 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