2012-06-14 49 views
19

爲什麼C++設計,使得在同一行聲明兩個int * S正確的做法是爲什麼C++指針*關聯到聲明的變量,而不是類型?

int *x, *y; 

int* x,y; 

我知道有些人認爲你應該避免兩種形式,並宣佈每變量在它自己的路線上,但我對爲什麼做這個語言決定感興趣。

+9

因爲這就是它在C中完成的方式。 – Fanael

+2

可能被認爲更靈活,用戶可以同時聲明一個指針和一個普通變量。 – Vijay

+5

由於C原因,請閱讀http://www.research.att.com/~bs/bs_faq2.html#whitespace中的原因:http://cm.bell-labs.com/cm/cs/who /dmr/chist.html –

回答

22

爲了保持與C代碼的兼容性,因爲這就是C的工作原理。

比亞使得一個好點here

int* p;int *p;之間的選擇是不是對與錯 ,但對風格和強調。 C強調錶達;聲明往往被認爲不過是一種必要的罪惡。另一方面,C++主要強調類型。

一個典型的C程序員編寫int *p;並解釋它*p is what is the int強調的語法,並且可以指向C(和C++) 聲明語法爭辯的樣式的正確性。的確, *綁定到語法中的名字p。

A typical C++ programmerint* p;並解釋它p is a pointer to an int強調類型。事實上,p的類型是int *。 我顯然更喜歡這個重點,並且認爲它對使用C++的更高級部分很重要。

所以,對於這個工作,因爲這在C++中的動機是它如何工作的C.

它的工作原理是,在C的動機是,如上所述,C強調錶達,而不是類型。

+1

那麼爲什麼C以這種方式工作? :) – illEatYourPuppies

+4

@illEatYourPuppies啊,但這是一個完全不同的問題:P –

+0

簡短的回答如下:「C強調錶達;聲明往往被認爲只不過是一個必要的邪惡。 –

7

簡單的答案是:因爲這就是C這樣做的方式。當然,其中只有一個問題:C爲什麼要這樣做?

最初的哲學,在C早期是聲明是一個確切的 圖像的使用。所以,當你寫:

int *p; 

,您聲明,表達*p的類型爲int(和 編譯器的工作原理進行相應的實際類型的p)。

這一天當然不再是真的C日介紹了typedef, 後來struct。而且任何相似之處與const (在C++中,然後改造成C首次引入),那裏的東西像

int *const p; 

與使用沒有關係完全消失。但到那時,死亡被鑄造了。

1

回答

這來自 「C」( 「普通C」, 「純C」,等等)。

當指針變量已經聲明,其使用的是這樣的:

... 
*p = &x; 
*q = SomePointerFunc(); 
.... 

,我讀了「C」的原始發明希望程序員用相同的語法來聲明指針變量,因爲它們使用的,與可變標識符前星形:

... 
int *p; 
int *q; 
... 

這同樣適用於陣列:

... 
x[5] = 'a'; 
y[77] = SomeItemFunc(); 
... 

... 
char x[5]; 
int y[100]; 
... 

一些老師,我不得不堅持爲變量聲明類型&功能這種方式(星接近標識符):

... 
int *p; 
int *q; 
... 

它來代替(旁邊的星類型標識符):

... 
int* p; 
int* q; 
... 

額外

在Java和其他語言,如C#中,數組的聲明,或指針旁邊TY pe,只留下變量或函數標識符,像這樣的僞代碼:

*int p; 
*int q; 
char[5] x; 
int[100] y; 

我更喜歡這種技術。

乾杯。

相關問題