调用函数并使用结果调用另一个函数的有效方法

时间:2017-02-19 14:29:46

标签: c++ optimization

我是一个业余爱好者,我正在学习一些个人项目的OpenGL;我对c ++没有最深刻的理解(我现在对此很好),所以如果这是一个愚蠢或明显的问题,我很抱歉。

我想知道每种方式的优缺点(如果有的话),假设这段代码运行游戏循环的每一个滴答:

glm::vec3 camera_pos = g_Camera->GetPosition();

some_func(camera_pos.x, camera_pos.y, camera_pos.z);

VS

some_func(g_Camera->GetPosition().x, g_Camera->GetPosition().y, g_Camera->GetPosition().z);

我的预感是第一个版本的性能更好,因为它只是一个函数调用,但是我不确定编译器是否会优化第二个版本以使整体没有差异?为了方便和可读性,我更喜欢使用第二版,但我最喜欢做更有效的事情。我试图不要过早地进行优化,但这已经是我现在想知道的一段时间了。

2 个答案:

答案 0 :(得分:3)

无论你使用什么编译器都可能会优化它。有些情况下它不能。例如,如果getPosition需要计算,不是幂等的,或者是虚拟调用,它可能无法对其进行优化。

这可能不是这种情况。使用您的第一个版本。它更易读,更容易调试。

如果有疑问,你可以编译成汇编或其他东西,看看是否有任何区别

答案 1 :(得分:0)

或者您可以立即传递整个结果。

如果some_func看起来像:

void some_func(const glm::vec3& pos) {...}

然后你可以这样称呼它:

some_func(g_Camera->GetPosition());