在我看来,C的箭头操作符( - >)是不必要的。点运算符(。)应该足够了。请使用以下代码:
typedef struct {
int member;
} my_type;
my_type foo;
my_type * bar;
int val;
val = foo.member;
val = bar->member;
我们看到箭头操作符必须用于取消引用栏。但是,我更愿意写
val = bar.member;
对于我是否试图从结构或指针结构中拉出“成员”,没有任何歧义。但是使用错误的运算符很容易,尤其是在重构代码时。 (例如,也许我正在foo上做一些复杂的操作,所以我将代码移动到一个新函数并将指针传递给foo)。我认为我不需要关心foo是否是指针;编译器可以担心细节。
所以问题是:消除它是不是更简单 - >来自C语言?
答案 0 :(得分:50)
'箭头'运算符是语法糖。 bar->member
与(*bar).member
相同。差异的一个原因是可维护性。使用与点运算符不同的箭头运算符,可以更容易地跟踪哪些变量是指针而哪些不是。有可能总是使用.
并让编译器尝试做正确的事情,但我怀疑这会使语言更简单。信任编译器解释你的意味着什么而不是你字面写的通常结果很糟糕。
答案 1 :(得分:6)
不,它会不更容易从语言中消除->
,原因很简单,如果需要重写大吨数的代码。但是,如果p.x
是指针,则可以定义p->x
等同于p
。这将是一个向后兼容的更改,因为该代码目前是非法的。