除C和C++以外的其他語言是否具有明確的引用和指針類型限定符?人們似乎很容易被類型的從右到左的閱讀順序所迷惑,其中char*&
是「對指向字符的指針的引用」或「字符指針引用」。使用明確引用的任何語言都可以使用從左到右的閱讀順序,例如&*char
/ref ptr char
?我正在開展一個小型語言項目,易讀性是我的一個關鍵問題。C++參考指針/指針的替代語法
在我看來,這是其中一個問題,其中一個人很容易,但很難讓搜索引擎提供答案。提前致謝!
除C和C++以外的其他語言是否具有明確的引用和指針類型限定符?人們似乎很容易被類型的從右到左的閱讀順序所迷惑,其中char*&
是「對指向字符的指針的引用」或「字符指針引用」。使用明確引用的任何語言都可以使用從左到右的閱讀順序,例如&*char
/ref ptr char
?我正在開展一個小型語言項目,易讀性是我的一個關鍵問題。C++參考指針/指針的替代語法
在我看來,這是其中一個問題,其中一個人很容易,但很難讓搜索引擎提供答案。提前致謝!
Stroustrup記錄在案,說聲明語法是「一個失敗的實驗」。不幸的是,爲了兼容C,C++必須遵循它。最初的想法是,聲明看起來像一個用途,例如:
char * p; // declare
* p; // use (dereference)
但這很快分崩離析對於更復雜的聲明。很多人(至少是很多帕斯卡程序員)喜歡的語法:
variable : type;
其中類型是一樣的東西:
array of char
這大約是可讀的,你會得到,並且是從左-對。
我認爲裏奇後來回答說,他仍然支持這種語法(儘管沒有引用)。就我個人而言,我與Stroustrup就此合作。 – 2010-03-11 17:54:19
@Jon好吧,它的種類是 - char * p可以從左到右閱讀。 – 2010-03-11 17:55:03
當C++有模板類型定義時,你可以做一些類似'template
Pascal強制執行類型的別名。你不能聲明:
MYVAR:{..字符指針}裁判結構的陣列
你必須在TYPE塊單獨聲明鏈中的每個步驟。
提高可讀性(如果您不介意上下滾動),可能也會提供更容易的解析。
相反,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)
哇,這是一段時間,因爲我看到了這一點。它幾乎太糟糕了,它從來沒有發現過。幾乎。 – 2010-03-11 18:53:24
它重載' - >'與新的含義是完全無關的舊的含義,它應該是*更*清楚? – caf 2010-03-11 23:38:35
@ caf-新的含義只適用於函數定義中的返回值,IIRC則適用於C++ 0x標準覆蓋 - >也用於函數原型。請參閱新C++功能列表中的「可選功能語法」。 – jmucchiello 2010-03-12 19:16:27
雖然我同意的聲明可以得到醜,什麼是differenc你認爲在「指向一個字符的指針」和「字符指針引用」之間? – UncleBens 2010-03-11 21:02:52
除了閱讀順序外沒有區別。一個使用自然英語排序,另一個使用並置來從人造語言排序中逼近自然英語排序。 – 2010-03-12 13:18:52