式(C++)
式:インデックス への移動
式とは、演算子とオペランドと区切り子を並べて計算処理を指定したものです。 「C++Builder の式」のセクションに挙げた正式な構文を見ると、式が再帰的に定義されていて、サブ式のネストに対する正式な制限はないことがわかります。 (ただし、式が複雑すぎてコンパイルできない場合には、コンパイラからメモリ不足のエラーが出力されます。)
メモ: 「C++Builder の式」のセクションでは、識別子と演算子を組み合わせて文法的に正しい "言いまわし" を作成する方法を示します。
式は、使用する演算子、かっこの有無、オペランドのデータ型によって決まる、変換、グループ化、結合、優先順位の各規則に則って評価されます。 標準の変換については、「基本型」トピックの「標準の算術変換で用いられる方法」の表で詳しく述べられています。 オペランドおよびサブ式のグループ化の仕方と、実際にコンパイラが評価を行う順序とが、必ずしも一致するとは限りません(「評価順序」を参照してください)。
式の結果として、左辺値が生成されることも、右辺値が生成されることも、値が生成されないこともあります。 値を生成するかしないかに関係なく、式によって副作用が起こる可能性があります。
演算子の優先順位および結合規則については、「演算子の結合規則と優先順位」トピックにまとめられています。 「C++Builder の式」に示す文法によって、演算子の優先順位と結合規則が完全に定義されます。
C++Builder の式
primary-expression:
literal
this (C++ specific)
:: identifier (C++ specific)
:: operator-function-name (C++ specific)
:: qualified-name (C++ specific)
(expression)
name
literal:
integer-constant
character-constant
floating-constant
string-literal
name:
identifier
operator-function-name (C++ specific)
conversion-function-name (C++ specific)
~ class-name (C++ specific)
qualified-name (C++ specific)
qualified-name: (C++ specific)
qualified-class-name :: name
postfix-expression:
primary-expression
postfix-expression [ expression ]
postfix-expression (<expression-list>)
simple-type-name (<expression-list>) (C++ specific)
postfix-expression . name
postfix-expression -> name
postfix-expression ++
postfix-expression --
const_cast < type-id > ( expression ) (C++ specific)
dynamic_cast < type-id > ( expression ) (C++ specific)
reinterpret_cast < type-id > ( expression ) (C++ specific)
static_cast < type-id > ( expression ) (C++ specific)
typeid ( expression ) (C++ specific)
typeid ( type-name ) (C++ specific)
expression-list:
assignment-expression
expression-list , assignment-expression
unary-expression:
postfix-expression
++ unary-expression
- - unary-expression
unary-operator cast-expression
sizeof unary-expression
sizeof ( type-name )
allocation-expression (C++ specific)
deallocation-expression (C++ specific)
unary-operator: one of & * + - !
allocation-expression: (C++ specific)
<::> new <placement> new-type-name <initializer>
<::> new <placement> (type-name) <initializer>
placement: (C++ specific)
(expression-list)
new-type-name: (C++ specific)
type-specifiers <new-declarator>
new-declarator: (C++ specific)
ptr-operator <new-declarator>
new-declarator [<expression>]
deallocation-expression: (C++ specific)
<::> delete cast-expression
<::> delete [] cast-expression
cast-expression:
unary-expression
( type-name ) cast-expression
pm-expression:
cast-expression
pm-expression .* cast-expression (C++ specific)
pm-expression ->* cast-expression (C++ specific)
multiplicative-expression:
pm-expression
multiplicative-expression * pm-expression
multiplicative-expression / pm-expression
multiplicative-expression % pm-expression
additive-expression:
multiplicative-expression
additive-expression + multiplicative-expression
additive-expression - multiplicative-expression
shift-expression:
additive-expression
shift-expression << additive-expression
shift-expression >> additive-expression
relational-expression:
shift-expression
relational-expression < shift-expression
relational-expression > shift-expression
relational-expression <= shift-expression
relational-expression >= shift-expressionequality-expression:
relational-expression
equality expression == relational-expression
equality expression != relational-expression
AND-expression:
equality-expression
AND-expression & equality-expression
exclusive-OR-expression:
AND-expression
exclusive-OR-expression ^ AND-expression
inclusive-OR-expression:
exclusive-OR-expression
inclusive-OR-expression | exclusive-OR-expression
logical-AND-expression:
inclusive-OR-expression
logical-AND-expression && inclusive-OR-expression
logical-OR-expression:
logical-AND-expression
logical-OR-expression || logical-AND-expression
conditional-expression:
logical-OR-expression
logical-OR-expression ? expression : conditional-expression
assignment-expression:
conditional-expression
unary-expression assignment-operator assignment-expression
assignment-operator:
one of =, *=, /=, %=, +=, -= <<, =>, >=, &=, ^=, |=
expression:
assignment-expression
expression , assignment-expression
constant-expression:
conditional-expression