式(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