2011-03-09 77 views
3

我覺得這裏有點困惑,從表達式中區分子表達式。複合表達式vs.表達式與子表達式

Compound expression - 涉及多個運算符的表達式。

E.g. 1 + 1 * 1

Expression - 具有一個或多個操作數的運算符。

E.g 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 2011-03-09 15:32:45

+0

@delnan我同意 – 2011-03-09 15:35:00

6
  • C++標準定義了一個表達 是什麼在一整章(第5章如果我記得正確)。

  • C++標準沒有定義的化合物的表達是什麼

  • C++標準定義了一個full expression作爲不被任何其他表達的子表達式的表達式

示例:

a + 4 + 5;

a + 4 + 5是一個完整的e的表達。無論是在表達a也不4也不a + 4充滿表達式(雖然他們是(子)表達式),因爲它是上述表達式的子表達式

+0

+1 - 是的,它是第5章。 – 2011-03-09 15:38:26

4

雖然你已經獲得了一些很好的答案,我會添加更多的從這些答案中可能不明顯的細節:子表達式也可以是一個完全獨立的表達式,它不是正在評估的完整表達式的詞彙組成部分。

這是一個明顯的例子,當您調用使用默認參數的函數時。在這種情況下,將默認值分配給參數被認爲是調用表達式的子表達式。例如,給定這樣的:

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

f()創建與值2初始化,然後通過引用傳遞到f臨時int。即使文本int const &x=2完全獨立,該臨時文件的創建和初始化也是完整表達式y= f() + 4的子表達式。