爲什麼C++設計,使得在同一行聲明兩個int * S正確的做法是爲什麼C++指針*關聯到聲明的變量,而不是類型?
int *x, *y;
不
int* x,y;
我知道有些人認爲你應該避免兩種形式,並宣佈每變量在它自己的路線上,但我對爲什麼做這個語言決定感興趣。
爲什麼C++設計,使得在同一行聲明兩個int * S正確的做法是爲什麼C++指針*關聯到聲明的變量,而不是類型?
int *x, *y;
不
int* x,y;
我知道有些人認爲你應該避免兩種形式,並宣佈每變量在它自己的路線上,但我對爲什麼做這個語言決定感興趣。
爲了保持與C代碼的兼容性,因爲這就是C的工作原理。
比亞使得一個好點here:
int* p;
和int *p;
之間的選擇是不是對與錯 ,但對風格和強調。 C強調錶達;聲明往往被認爲不過是一種必要的罪惡。另一方面,C++主要強調類型。一個典型的C程序員編寫
int *p;
並解釋它*p is what is the int
強調的語法,並且可以指向C(和C++) 聲明語法爭辯的樣式的正確性。的確, *綁定到語法中的名字p。A
typical C++ programmer
寫int* p;
並解釋它p is a pointer to an int
強調類型。事實上,p的類型是int *。 我顯然更喜歡這個重點,並且認爲它對使用C++的更高級部分很重要。
所以,對於這個工作,因爲這在C++中的動機是它如何工作的C.
它的工作原理是,在C的動機是,如上所述,C強調錶達,而不是類型。
那麼爲什麼C以這種方式工作? :) – illEatYourPuppies
@illEatYourPuppies啊,但這是一個完全不同的問題:P –
簡短的回答如下:「C強調錶達;聲明往往被認爲只不過是一個必要的邪惡。 –
簡單的答案是:因爲這就是C這樣做的方式。當然,其中只有一個問題:C爲什麼要這樣做?
最初的哲學,在C早期是聲明是一個確切的 圖像的使用。所以,當你寫:
int *p;
,您聲明,表達*p
的類型爲int
(和 編譯器的工作原理進行相應的實際類型的p
)。
這一天當然不再是真的C日介紹了typedef
, 後來struct
。而且任何相似之處與const
(在C++中,然後改造成C首次引入),那裏的東西像
int *const p;
與使用沒有關係完全消失。但到那時,死亡被鑄造了。
回答
這來自 「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;
我更喜歡這種技術。
乾杯。
因爲這就是它在C中完成的方式。 – Fanael
可能被認爲更靈活,用戶可以同時聲明一個指針和一個普通變量。 – Vijay
由於C原因,請閱讀http://www.research.att.com/~bs/bs_faq2.html#whitespace中的原因:http://cm.bell-labs.com/cm/cs/who /dmr/chist.html –