2016-02-23 190 views
-1

在C++(以及其他編程語言)中,(x++)將x評估爲令牌,然後將x遞增1,而(++x)首先遞增x,然後評估x的新值作爲標記。爲什麼存在x ++和++ x,x + = 2但不是x = + 2?

類似地,(x += 2)存在(評估x爲令牌,然後將x增加2)。然而,(x =+ 2)不會歸結爲將x遞增2,然後評估x的新值作爲標記,而是評估爲x = +2

爲了區分x =+ 2x = +2,適當的間隔將是必要的,但我不明白爲什麼這將是一個問題。

爲什麼(x =+ 2)沒有設計執行兩個預增量的功能?

編輯:這樣做的目的不是看起來漂亮,而是爲了方便一些可能出現循環的情況。

+0

,因爲適當的間距是必要的,例如, 'x = + 2'是什麼。 'x = x + 2'?或'x =正面2'?一旦你必須輸入適當的間距,使用'x = + 2'和'x + = 2'完全不會節省時間/空間。 –

+0

這樣做的目的不是很漂亮,而是爲了方便一些循環的情況。 –

+0

並記住C的buzzphrase是「彙編程序的所有可讀性的全部能力」。大多數cpus有一個'inc'指令來做一個簡單的'x = x + 1',而很少/沒有'inc2'。所以雖然x ++可以直接映射到那個'inc'指令,但是沒有映射爲+2變體,所以你可能只需寫出+2的增量。 –

回答

4

爲什麼(x =+ 2)沒有設計執行兩個(++x)表達式的功能?

由於C++中的空格不重要(模分隔關鍵字,如class)。如果這兩個語句意味着大不相同的東西,這將是一個非常尖銳的語言中斷:

x =+ 2; 
x = +2; 

讓我們不要把C++變成Python。

+0

我很想爲Python刺拳投降,但我不會。在Python中,空白不能以這種方式工作。縮進在Python中很重要,否則空格不會比C++中的更重要。 –

2

我記得K & R書(至少第一版,我現在沒有我的方便)說=+最初是打算成爲C語言中的操作符,但它是不明確的解析。所以選擇了+=。在空白通常不顯着的語言中,要求用空格來消除歧義並不是非常友好。

2

這是因爲人們很容易理解X = + 2爲x =正2.