箭头操作员与点操作员
在我看来,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
。 这将是一个向后兼容的更改,因为该代码目前是非法的。