C ++参考/指针语法的替代品

时间:2010-03-11 17:45:59

标签: c++ c pointers reference

C和C ++以外的哪些语言具有显式引用和指针类型限定符?人们似乎很容易被类型的从右到左阅读顺序混淆,其中char*&是“对指向字符的指针的引用”,或“字符指针引用”;使用显式引用的任何语言都可以使用从左到右的阅读顺序,例如&*char / ref ptr char?我正在开展一个小小的语言项目,易读性是我关注的主要问题之一。

在我看来,这是一个人很容易对其中一个但搜索引擎难以提供答案的问题之一。提前谢谢!

4 个答案:

答案 0 :(得分:5)

Stroustrup正在记录中说声明语法是“失败的实验”。不幸的是,C ++必须与它兼容才能实现C兼容性。最初的想法是声明看起来像一个用途,例如:

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

但是对于更复杂的声明,这很快就会崩溃。很多人(至少很多Pascal程序员)更喜欢这种语法:

variable : type;

其中type类似于:

array of char

这与您将要获得的一样可读,并且从左到右。

答案 1 :(得分:2)

我认为这已经不存在了,但它可能对您有用:http://en.wikipedia.org/wiki/Significantly_Prettier_and_Easier_C%2B%2B_Syntax

答案 2 :(得分: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 ++不同,用于变量名的sigil决定了将要读取的类型(标量与数组与散列)

say "Array size: " . scalar(@a);
say "Array size: " . scalar($@b);  # dereference with $, access as @ (array)

答案 3 :(得分:0)

Pascal强制执行类型别名。你不能声明:

myvar:引用struct {..指向char。}

的数组

您必须在TYPE块中单独声明链中的每个步骤。

提高了可读性(如果你不介意上下滚动),也可能提供更容易的解析。