箭頭解引用p->m
是(*p).m
的語法糖,它看起來像它可能涉及兩個單獨的內存查找操作 - 一個找到堆上的對象,第二個找到成員字段偏移。C++重複箭頭操作符解引用性能vs點運算符
這讓我質疑這兩個代碼片段之間是否存在任何性能差異。假設classA
具有30+需要被以各種順序訪問(不一定連續或連續地)的各種類型的不同字段:1
版本:
void func(classA* ptr)
{
std::string s = ptr->field1;
int i = ptr->field2;
float f = ptr->field3;
// etc...
}
2版本:
void func(classA* ptr)
{
classA &a = *ptr;
std::string s = a.field1;
int i = a.field2;
float f = a.field3;
// etc...
}
所以我的問題是這兩個版本之間是否存在性能差異(即使非常小),或者如果編譯器是s (即使不同的字段訪問被它們之間的許多其他代碼行中斷,我沒有在這裏顯示)。
如果沒有人知道答案,我將不得不微調自己的基準。不過,我希望將來可以爲其他人提供答案。 –
測量它...或者比較程序集的輸出,你甚至可以在線完成https://gcc.godbolt.org/ – StoryTeller
好吧,只要你自己找到答案就可以了您的代碼或使用分析器。 – johnbakers