rem*_*ine 35 c pointers structure
在我看来,C的箭头操作符( - >)是不必要的.点运算符(.)应该足够了.请使用以下代码:
typedef struct {
int member;
} my_type;
my_type foo;
my_type * bar;
int val;
val = foo.member;
val = bar->member;
Run Code Online (Sandbox Code Playgroud)
我们看到箭头操作符必须用于取消引用栏.但是,我更愿意写
val = bar.member;
Run Code Online (Sandbox Code Playgroud)
关于我是否试图从结构或指针结构中拉出"成员",没有任何歧义.但是使用错误的运算符很容易,尤其是在重构代码时.(例如,也许我正在foo上做一些复杂的操作,所以我将代码移动到一个新函数并将指针传递给foo).我认为我不需要关心foo是否是指针; 编译器可以担心细节.
所以问题是:从C语言中消除 - >不是更简单吗?
bta*_*bta 57
'箭头'运算符是语法糖. bar->member是一样的(*bar).member.差异的一个原因是可维护性.使用与点运算符不同的箭头运算符,可以更容易地跟踪哪些变量是指针而哪些不是.有可能总是使用.并让编译器尝试做正确的事情,但我怀疑这会使语言更简单.相信编译器解释你的意思而不是你真正写的东西通常会很糟糕.
不,从语言中消除起来并不容易->,原因很简单,如果需要重写大吨数的代码.但是,可以定义p.x等于p->xif p是指针.这将是一个向后兼容的更改,因为该代码目前是非法的.
| 归档时间: |
|
| 查看次数: |
46617 次 |
| 最近记录: |