在我看来,C 的箭头运算符 (->) 是不必要的。点运算符 (.) 应该足够了。采取以下代码:
typedef struct {
int member;
} my_type;
my_type foo;
my_type * bar;
int val;
val = foo.member;
val = bar->member;
我们看到必须使用箭头运算符来取消引用 bar。但是,我更愿意写
val = bar.member;
关于我是试图从结构中提取“成员”还是从指向该结构的指针中提取“成员”,这一点没有歧义。但是很容易使用错误的运算符,尤其是在重构代码时。(例如,也许我正在对 foo 进行一些复杂的操作,所以我将代码移动到一个新函数中并传递一个指向 foo 的指针)。我认为我不需要关心 foo 是否是指针;编译器可以担心细节。
所以问题是:从 C 语言中消除 -> 不是更简单吗?