Namespaces
Variants

Expressions

From cppreference.net

式は、 operators とその operands の連続であり、計算を指定するものです。

式の評価は、結果を生成することがあります(例えば、 2 + 2 の評価は結果 4 を生成します)、副作用を生成することがあります(例えば、 printf ( "%d" , 4 ) の評価は文字 '4' を標準出力ストリームに送信します)、またオブジェクトや関数を指定することがあります。

目次

一般

  • value categories (lvalue, non-lvalue object, function designator) は式をその値によって分類します
  • order of evaluation は引数と部分式の中間結果が得られる順序を指定します

演算子

一般的な演算子
代入 インクリメント
デクリメント
算術 論理 比較 メンバー
アクセス
その他

a = b
a + = b
a - = b
a * = b
a / = b
a % = b
a & = b
a | = b
a ^ = b
a <<= b
a >>= b

++ a
-- a
a ++
a --

+ a
- a
a + b
a - b
a * b
a / b
a % b
~a
a & b
a | b
a ^ b
a << b
a >> b

! a
a && b
a || b

a == b
a ! = b
a < b
a > b
a <= b
a >= b

a [ b ]
* a
& a
a - > b
a. b

a ( ... )
a, b
( type ) a
a ? b : c
sizeof


_Alignof
(C11以降)
(C23まで)

alignof
(C23以降)

変換

  • 暗黙の変換 は、オペランドの型が演算子の期待に一致しない場合に発生します
  • キャスト は、値をある型から別の型に明示的に変換するために使用できます。

その他

  • 定数式 はコンパイル時に評価され、コンパイル時コンテキストで使用できます( 非VLA (C99以降) 配列サイズ、静的初期化子など)
(C11以降)
(C99以降)

基本式

任意の演算子のオペランドは、他の式であるか、あるいは 基本式 である(例えば、 1 + 2 * 3 において、operator+のオペランドは部分式 2 * 3 と基本式 1 である)。

一次式は以下のいずれかです:

1) 定数とリテラル(例: 2 または "Hello, world"
2) 適切に宣言された identifiers (例: n または printf
(C11以降)

括弧内の任意の式もまた基本式として分類されます:これにより、括弧が任意の演算子よりも高い優先順位を持つことが保証されます。

定数とリテラル

Cプログラムのソースコード内では、特定の型の定数値を、リテラル(左辺値式の場合)および定数(非左辺値式の場合)として知られる特殊な式を使用して埋め込むことができます。

  • integer constants は整数型の10進数、8進数、または16進数です。
  • character constants は文字型への変換に適した int 型の個々の文字、または char8_t , (since C23) char16_t , char32_t , または (since C11) wchar_t 型の個々の文字です。
  • floating constants float double 、または long double 型の値です。
(C23以降)
  • 文字列リテラル は、 char [ ] char8_t [ ] (C23以降) char16_t [ ] char32_t [ ] 型の文字シーケンス (C11以降) または wchar_t [ ] で、null終端文字列を表します
  • compound literals は構造体、共用体、または配列型の値をプログラムコードに直接埋め込んだ値です
(C99以降)

未評価式

sizeof operator のオペランドは評価されない式です (VLAでない限り) (C99以降) 。したがって、 size_t n = sizeof ( printf ( "%d" , 4 ) ) ; はコンソール出力を実行しません。

_Alignof (until C23) alignof (since C23) 演算子のオペランド、 ジェネリック選択 の制御式、および _Alignof (until C23) alignof (since C23) のオペランドであるVLAのサイズ式も、評価されない式です。

(since C11)

参考文献

  • C23規格 (ISO/IEC 9899:2024):
  • 6.5 式 (p: 未定)
  • 6.6 定数式 (p: 未定)
  • C17規格(ISO/IEC 9899:2018):
  • 6.5 式(pp: 55-75)
  • 6.6 定数式(pp: 76-77)
  • C11規格 (ISO/IEC 9899:2011):
  • 6.5 式 (p: 76-105)
  • 6.6 定数式 (p: 106-107)
  • C99規格 (ISO/IEC 9899:1999):
  • 6.5 式 (p: 67-94)
  • 6.6 定数式 (p: 95-96)
  • C89/C90標準 (ISO/IEC 9899:1990):
  • 3.3 式
  • 3.4 定数式

関連項目

C++ ドキュメント for Expressions