我最近参加的一门(C++)课程中,老师提到使用->
运算符比使用点标记和手动解引用指针(例如(*ptr)
)稍微慢了一点。
- 这是真的吗?如果是,为什么?
- 是否也适用于C语言?
->
运算符和 .
运算符既不比另一个更慢也不更快。事实上,解引用 操作比仅仅访问内存位置慢,因为多了一次间接寻址动作。这是生活中的一个事实,在 C 和 C++ 以及其他任何语言中都是如此。.
来解引用!所以问题并不在于 箭头 vs 点,而在于编译器是否可以直接访问值,还是必须先搜索其地址。p->member
与(*p).member
,它们在默认实现中是完全相同和彻底相同的。对于Marcus:拿回你的钱。 - Peter - Reinstate Monica
a->b
只是(*a).b
的语法糖,我非常怀疑这种说法。 - unwind->
和*
,原则上你可以调皮地在->
实现中插入一个sleep(n)
。但是,是的... - Konrad Rudolph