箭头操作员与点操作员

在我看来,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语言中消除 – >不是更简单吗?

‘箭头’操作符是语法糖。 bar->member(*bar).member 。 差异的一个原因是可维护性。 如果箭头运算符与点运算符不同,则更容易跟踪哪些变量是指针而哪些不是。 可能总是使用. 并让编译器尝试做正确的事情,但我怀疑这会使语言更简单。 相信编译器解释你的意思而不是你真正写的东西通常会很糟糕。

不,从语言中消除->容易的,原因很简单,如果需要重写大吨数的代码。 然而,如果p是指针,则可以定义px等效于p->x 。 这将是一个向后兼容的更改,因为该代码目前是非法的。