依赖于多个静态转换调用的编译器优化?

stu*_*101 0 c++ optimization static-cast

我正在使用一个代码库,我在其中看到以下代码行

  auto a = static_cast<custom_type*>(obj.get())->a();
  auto b = static_cast<custom_type*>(obj.get())->b();
  auto c = static_cast<custom_type*>(obj.get())->c();
Run Code Online (Sandbox Code Playgroud)

期望编译器优化一系列get()andstatic_cast调用是否合理,或者最好执行以下操作:

  auto temp = static_cast<custom_type*>(obj.get());
  auto a = temp->a();
  auto b = temp->b();
  auto c = temp->c();
Run Code Online (Sandbox Code Playgroud)

Cal*_*eth 5

static_cast<T>不是一个函数。

根据custom_type*和之间的关系decltype(obj.get()),以及 或 是否ab虚拟c的,在生成的目标代码中可能找不到它的踪迹,具体取决于实现如何选择实现成员函数调用。

如果编译器可以证明obj.get()每次都会返回相同的值,并且没有其他可观察到的影响,那么它可能会根据 as-if 规则执行与第二次剪辑相同的操作。