我覺得這裏有點困惑,從表達式中區分子表達式。複合表達式vs.表達式與子表達式
Compound expression
- 涉及多個運算符的表達式。
E.g. 1 + 1 * 1
Expression
- 具有一個或多個操作數的運算符。
E.g 1 + 1
或+ 1
是有其被稱爲子表達的表達以下的水平?
我覺得這裏有點困惑,從表達式中區分子表達式。複合表達式vs.表達式與子表達式
Compound expression
- 涉及多個運算符的表達式。
E.g. 1 + 1 * 1
Expression
- 具有一個或多個操作數的運算符。
E.g 1 + 1
或+ 1
是有其被稱爲子表達的表達以下的水平?
表達式可能沒有運算符。例如,在以下內容中:
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 * b
和c * d
的子表達式。
詞語 「化合物」 通常相對於用於語句,不表達式。複合語句是一對可能包含一系列其他語句的大括號。例如,函數體幾乎總是一個複合語句,就像許多循環體一樣。
通常,複雜表達式只是簡單地稱爲「表達式」,它們的部分稱爲子表達式。
據我所知,從上面的定義,2+3
,-4
和*ptr
是表達式。什麼可以比這更短?也許只有標識符和常量,例如4
。
C++標準定義了一個表達 是什麼在一整章(第5章如果我記得正確)。
C++標準沒有定義的化合物的表達是什麼
C++標準定義了一個full expression
作爲不被任何其他表達的子表達式的表達式
示例:
a + 4 + 5;
a + 4 + 5
是一個完整的e的表達。無論是在表達a
也不4
也不a + 4
充滿表達式(雖然他們是(子)表達式),因爲它是上述表達式的子表達式
+1 - 是的,它是第5章。 – 2011-03-09 15:38:26
雖然你已經獲得了一些很好的答案,我會添加更多的從這些答案中可能不明顯的細節:子表達式也可以是一個完全獨立的表達式,它不是正在評估的完整表達式的詞彙組成部分。
這是一個明顯的例子,當您調用使用默認參數的函數時。在這種情況下,將默認值分配給參數被認爲是調用表達式的子表達式。例如,給定這樣的:
int f(int const &x=2) { return x; }
int y = f()+4;
的f()
創建與值2初始化,然後通過引用傳遞到f
臨時int
。即使文本int const &x=2
完全獨立,該臨時文件的創建和初始化也是完整表達式y= f() + 4
的子表達式。
即使這些都是表達式。 – delnan 2011-03-09 15:32:45
@delnan我同意 – 2011-03-09 15:35:00