Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/154.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/EmptyTag/154.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ (ptr+;i)——>;Func()和&;ptr[i].Func()_C++_Performance_Hpc - Fatal编程技术网

C++ (ptr+;i)——>;Func()和&;ptr[i].Func()

C++ (ptr+;i)——>;Func()和&;ptr[i].Func(),c++,performance,hpc,C++,Performance,Hpc,或者两者都是平等的?ptr是指向结构数组的指针 UPD:谢谢大家的回复。对不起,我拼错了语法。我试图比较的是(ptr+I)->Func()与(&ptr[I])->Func()。我把&操作符弄糊涂了,因为它应该返回变量的地址。它不会导致获取该地址的另一个操作吗?(ptr+i)->Func()相当于ptr[i].Func() 由于运算符的优先级,&ptr[i].Func()相当于&(ptr[i].Func()),即它采用返回值的地址Func(),没有区别ptr[i]完全等同于*(ptr+i)。前者通

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

UPD:谢谢大家的回复。对不起,我拼错了语法。我试图比较的是
(ptr+I)->Func()
(&ptr[I])->Func()
。我把
&
操作符弄糊涂了,因为它应该返回变量的地址。它不会导致获取该地址的另一个操作吗?

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


由于运算符的优先级,
&ptr[i].Func()
相当于
&(ptr[i].Func())
,即它采用返回值的地址
Func()

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

我假设struct或class具有Func函数。 所以按地址访问函数和访问字段是一样的。 在我看来,这只是解决算术上的差异。
所以这两个表达式是相等的。

您的意思可能是
&ptr[i]>Func()
,否则表达式的功能不完全相同

根据C++标准,将指针类型的值添加到积分类型的值,生成一个与原始类型相同的指针,其偏移量等于整型的值。取地址

ptr[offset]
会产生相同的值,因此两者是相同的。此外,添加顺序并不重要,因此下面的所有表达式都执行相同的操作,并应生成相同的可执行代码:

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

&(i[ptr])//您的意思是
&ptr[i]->Func()
,对吗?这假设返回值是您应该获取的地址,而不是某种临时值。在我看来,标题中的
&
更可能是bogusSorry,伙计们,我拼错了代码,它是(&ptr[i])->Func();我已经更新了我的问题。由于
ptr[I]
*(ptr+I)
相同,
&ptr[I]
&*(ptr+I)
相同,后者与
(ptr+I)
相同。这里没有性能问题,它们都解析为相同的东西。相反:
ptr[i]
相当于
*(ptr+i)
@black和
(*X)。Func
相当于
X->Func
@black,所以它们是等价的,是可交换的relation@black对称性是等价的条件之一。