方法链慢C++?

Neo*_*ana -1 c++ compiler-optimization

例如,哪些更快:

if(object.GetMemberX().IsSomething())
{
    Store(object.GetMemberX());
    object.GetMemberX().FlagSomething();
}
Run Code Online (Sandbox Code Playgroud)

要么

typeX x = object.GetMemberX();
if(typeX.IsSomething())
{
    Store(x);
    x.FlagSomething();
}
Run Code Online (Sandbox Code Playgroud)

我想如果GetMemberX()在第一个例子中返回一个指针或一个引用,编译器就无法优化掉两个调用,因为它不能保证返回的指针/引用对于每个调用都是相同的?

但在第二个例子中我存储它?

如果这是真的,它是否只适用于返回指针/引用的方法?如果我的方法按值返回它们会受益于/受到不同调用的阻碍吗?

Ser*_*sta 5

这个问题在C++通用上下文中无法解答...因为它取决于编译器实现和优化级别!

您甚至不能确定特定优化级别的特定编译器不会为两个版本生成完全相同的代码,因为最终操作应该是相同的.

我的建议是只使用通用规则:首先编写可读的代码(由您和可能的同行编写......).当出现性能问题时,对程序进行分析并仅优化应得的小部件,始终通过对不同可能性进行基准测试.

当然,上述问题主要是低级优化,就像你在这里问的那样.你应该总是选择与预期用法一致的algorythms ...