在一些代码中我看到了以下内容:
(&object)->something
.
object.something
有什么优势吗?- 编译器是否以某种方式优化了此类代码,或者它是否以任何方式更快?
最佳答案
如果 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]
(在没有优化的情况下它们是相同的;打开优化...整个调用都被丢弃,所以留给好奇的读者)
关于C++ 通过指针访问对象而不是直接访问,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50489532/