2011-03-09 4 views
3

私はここで、発現と区別するために少し混乱していると感じました。コンパウンドの発現対サブ表現の比較

Compound expression - 複数の演算子を含む式。

など。 1 + 1 * 1

Expression - 1つ以上のオペランドを持つ演算子。

例えば1 + 1又は+ 1

サブ式と呼ばれる式の下のレベルはありますか?

答えて

9

式に演算子が含まれていない可能性があります。例えば、以下のようになります。

int a = 0; 
a; 

aが式です。式は、C++標準を引用するために、「計算を指定する演算子とオペランドのシーケンス」(C++ 03 5/1)です。オペレータがいなくても、aは「オペランド」です。


サブ表現は、より大きな表現の一部である任意の式です。だから、

int a = 0, b = 0, c = 0, d = 0; 
a * b + c * d; 

a * bc * dに部分式です。


単語 "化合物" は、通常、ない表現に関して使用されています。複合文は、一連の他の文を含むことができる中括弧のペアです。たとえば、多くのループ本体と同様に、関数本体はほぼ常に複合文です。

通常、複雑な表現は単に「式」と呼ばれ、その部分は部分式と呼ばれます。

0

上記の定義から理解できる限り、2+3,-4および*ptrは式です。これよりも短いものは何ですか?たぶん、識別子と定数(例えば、4)だけです。

+0

でも、それらは式です。 – delnan

+0

@delnan私は同意する –

6
  • C++標準では(私が正しくリコール場合は、第5章) 式は全体の章にあるものを定義します。

  • C++標準では、化合物の発現が

  • C++標準は、他の式

例の部分式ではない式としてfull expressionを規定するものを定義しません

a + 4 + 5;

a + 4 + 5は完全なeですxpression。それはあなたがすでにいくつかの良い答えを受けましたが、私は1つ以上を追加します

+0

+1 - はい、それは第5章です。 –

4

上記の式の部分式であるため、その式でa4a + 4どちらも完全な表現(彼らは(サブ)式であるが)ありますそれらの答えから明らかでないかもしれない詳細:サブ式は、評価される完全な表現の字句的に含まれない完全に別個の式でもあり得る。

これの明白な例は、デフォルトの引数を使用する関数を呼び出す場合です。この場合、引数にデフォルト値を代入することは呼び出し側式の部分式とみなされます。

int f(int const &x=2) { return x; } 
int y = f()+4; 

f()が値2で初期化し、その後fに参照渡しの一時intを作成します。たとえば、のようなものを与えられました。テキストint const &x=2が完全に別個であっても、その一時的な表現の作成と初期化は完全表現y= f() + 4の部分式です。

関連する問題