(ptr + i) - > Func()和& ptr [i] .Func()之间有什么区别吗?

时间:2015-03-31 12:22:08

标签: c++ performance hpc

或两者都是平等的? ptr是指向结构数组的指针。

UPD:谢谢大家的回复。对不起,我拼错了语法。我想要比较的是(ptr + i)->Func()(&ptr[i])->Func()。我与&运算符混淆,因为它应该返回变量的地址。是否会导致再次采取该地址的操作?

4 个答案:

答案 0 :(得分:8)

(ptr + i)->Func()相当于ptr[i].Func()

由于运算符优先级,&ptr[i].Func()等同于&(ptr[i].Func()),即它需要Func()的返回值的地址。

答案 1 :(得分:2)

没有区别。标准保证ptr[i]完全等同于*(ptr+i)。前者通常更容易阅读。

答案 2 :(得分:1)

我假设struct或class具有Func函数。 因此,按地址访问功能与访问该字段的功能相同。 在我看来,它只是地址算术差异。 所以?两者都是平等的。

答案 3 :(得分:1)

您可能意味着&ptr[i]->Func(),否则您的表达式没有相同的功能。

根据C ++标准,将指针类型的值添加到整数类型的值会产生与原始相同类型的指针,其偏移量等于整数类型的值。取ptr[offset]的地址产生相同的值,因此两者是相同的。此外,添加的顺序无关紧要,因此下面的所有表达式都做同样的事情,并且应该生成相同的可执行代码:

&ptr[i]
(ptr+i)
(i+ptr)
&(i[ptr]) // <<== Don't do this!

最后一项只是好奇心。不要在编程难题之外的代码中使用此构造。