c++ - -> 和 . 之间差异的基本原理是什么?在 C/C++ 中?

标签 c++ c standards

<分区>

Possible Duplicates:
C++: ptr->hello(); /* VERSUS */ (*ptr).hello();
Why does C have a distinction between -> and . ?

我知道成员运算符 (.) 和指针运算符 (->) 之间的区别。

为什么 C 设计者要为此访问创建不同的运算符?为什么编译器不能自己解决?

如果您一直使用 .是否存在任何情况下,您是指成员还是指针成员是模棱两可的?

编辑:我不是在寻找“(*a).b”语法。我问为什么设计师不让你用“a.b”代替“a->b”?

最佳答案

您真的希望编译器“自行解决问题”吗?如果是,那么下面的计算结果相同(假设 p 是指向具有成员 x 的结构的指针):

(*p).x;
p.x

如果指针的取消引用在那里是隐式的,它是否应该在所有地方都是隐式的?考虑:

int* p;
int i = p; // should dereferencing be implicit here as well?

我认为这比使用两个单独的运算符要困惑得多。

让两个运算符帮助跟踪您有多少间接层也很有帮助。诚然,-> 运算符并不是严格必需的,因为 p->x 等同于 (*p).x,但是它确实使代码更清晰易读。

关于c++ - -> 和 . 之间差异的基本原理是什么?在 C/C++ 中?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2936993/

相关文章:

c++ - 析构函数中使用可能指向或不指向有效对象的指针的回调的正确设计模式是什么?

c - 在 C 中访问从 Lua 传递的表,而不复制值

c - 如何用来自/dev/urandom 的 100 MB 数据填充文件?

c++ - C++11 标准中的哪个子句支持下面函数 foo() 返回中的 move 构造函数调用?

python - 在 Python 中格式化电话号码的最佳方法是什么?

c++ - boost python 返回与 make_constructor 相同的实例

c# - FMOD,每秒节拍

c - 是否可以在 C 中将 char** 转换为 char*?

c++ - C++ 是否允许在可变参数模板参数之后使用普通参数?

c++ - 如何在多个架构中将 ccache 与 gcc -march=native 一起使用?