C ++访问对象通过指针而不是直接访问

时间:2018-05-23 13:20:33

标签: c++ performance pointers

在某些代码中我看到了以下内容: (&object)->something

  1. object.something是否有任何优势?
  2. 编译器是否以某种方式优化了这些代码,或者它以任何方式更快?

1 个答案:

答案 0 :(得分:4)

如果operator&没有超载,则它基本上与https://godbolt.org/g/iPTjRY

相同
auto v_1 = f_1.get(); 
auto v_2 = (&f_1)->get();

解决了几乎相同:

lea rax, [rbp-12]               ; load object address
mov rdi, rax                    ; move object address into rdi, not sure why not just: 'lea rdi, [rbp-12]'
call Foo::get() const           ; invoke the subroutine
mov DWORD PTR [rbp-4], eax      ; save the result at [rbp-4]

(已经没有优化它们是相同的;启用了optmizations ...整个调用被丢弃,所以留给好奇的读者)