2010-03-11 135 views
3

除C和C++以外的其他語言是否具有明確的引用和指針類型限定符?人們似乎很容易被類型的從右到左的閱讀順序所迷惑,其中char*&是「對指向字符的指針的引用」或「字符指針引用」。使用明確引用的任何語言都可以使用從左到右的閱讀順序,例如&*char/ref ptr char?我正在開展一個小型語言項目,易讀性是我的一個關鍵問題。C++參考指針/指針的替代語法

在我看來,這是其中一個問題,其中一個人很容易,但很難讓搜索引擎提供答案。提前致謝!

+0

雖然我同意的聲明可以得到醜,什麼是differenc你認爲在「指向一個字符的指針」和「字符指針引用」之間? – UncleBens 2010-03-11 21:02:52

+0

除了閱讀順序外沒有區別。一個使用自然英語排序,另一個使用並置來從人造語言排序中逼近自然英語排序。 – 2010-03-12 13:18:52

回答

5

Stroustrup記錄在案,說聲明語法是「一個失敗的實驗」。不幸的是,爲了兼容C,C++必須遵循它。最初的想法是,聲明看起來像一個用途,例如:

char * p; // declare 
* p;  // use (dereference) 

但這很快分崩離析對於更復雜的聲明。很多人(至少是很多帕斯卡程序員)喜歡的語法:

variable : type; 

其中類型是一樣的東西:

array of char 

這大約是可讀的,你會得到,並且是從左-對。

+2

我認爲裏奇後來回答說,他仍然支持這種語法(儘管沒有引用)。就我個人而言,我與Stroustrup就此合作。 – 2010-03-11 17:54:19

+0

@Jon好吧,它的種類是 - char * p可以從左到右閱讀。 – 2010-03-11 17:55:03

+0

當C++有模板類型定義時,你可以做一些類似'template typedef T * ptr_t; template typedef T&ref_t; ref_t > p;'。我想知道Stroustrup會怎麼想。 – 2010-03-11 18:28:18

0

Pascal強制執行類型的別名。你不能聲明:

MYVAR:{..字符指針}裁判結構的陣列

你必須在TYPE塊單獨聲明鏈中的每個步驟。

提高可讀性(如果您不介意上下滾動),可能也會提供更容易的解析。

1

相反,Perl 5中的方法被讀出解引用當左到右:

$i = 10; # Scalar 
say $i; 

$j = \$i; # Scalar reference 
say $$j; 

@a = (1, 2, 3); # Array 
$b = \@a; # Array reference 
say $a[0]; 
say $$b[0]; # prints same thing 

但是,與C/C++,針對變量名中使用的印記確定將被讀取的類型(標量與數組與哈希)

say "Array size: " . scalar(@a); 
say "Array size: " . scalar([email protected]); # dereference with $, access as @ (array) 
2

我覺得這是解散,但它可能是你有幫助:http://en.wikipedia.org/wiki/Significantly_Prettier_and_Easier_C%2B%2B_Syntax

+0

哇,這是一段時間,因爲我看到了這一點。它幾乎太糟糕了,它從來沒有發現過。幾乎。 – 2010-03-11 18:53:24

+0

它重載' - >'與新的含義是完全無關的舊的含義,它應該是*更*清楚? – caf 2010-03-11 23:38:35

+0

@ caf-新的含義只適用於函數定義中的返回值,IIRC則適用於C++ 0x標準覆蓋 - >也用於函數原型。請參閱新C++功能列表中的「可選功能語法」。 – jmucchiello 2010-03-12 19:16:27