式(C++)

提供: Appmethod Topics
移動先: 案内検索

式:インデックス への移動


式とは、演算子とオペランドと区切り子を並べて計算処理を指定したものです。 「Appmethod C++ の式」のセクションに挙げた正式な構文を見ると、式が再帰的に定義されていて、サブ式のネストに対する正式な制限はないことがわかります。 (ただし、式が複雑すぎてコンパイルできない場合には、コンパイラからメモリ不足のエラーが出力されます。)

メモ: 「Appmethod C++ の式」のセクションでは、識別子と演算子を組み合わせて文法的に正しい "言いまわし" を作成する方法を示します。

式は、使用する演算子、かっこの有無、オペランドのデータ型によって決まる、変換、グループ化、結合、優先順位の各規則に則って評価されます。 標準の変換については、「基本型」トピックの「標準の算術変換で用いられる方法」の表で詳しく述べられています。 オペランドおよびサブ式のグループ化の仕方と、実際にコンパイラが評価を行う順序とが、必ずしも一致するとは限りません(「評価順序」を参照してください)。

式の結果として、左辺値が生成されることも、右辺値が生成されることも、値が生成されないこともあります。 値を生成するかしないかに関係なく、式によって副作用が起こる可能性があります。

演算子の優先順位および結合規則については、「演算子の結合規則と優先順位」トピックにまとめられています。 「Appmethod C++ の式」に示す文法によって、演算子の優先順位と結合規則が完全に定義されます。

Appmethod C++ の式

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