我是一个业余爱好者,我正在学习一些个人项目的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);
我的预感是第一个版本的性能更好,因为它只是一个函数调用,但是我不确定编译器是否会优化第二个版本以使整体没有差异?为了方便和可读性,我更喜欢使用第二版,但我最喜欢做更有效的事情。我试图不要过早地进行优化,但这已经是我现在想知道的一段时间了。
答案 0 :(得分:3)
无论你使用什么编译器都可能会优化它。有些情况下它不能。例如,如果getPosition需要计算,不是幂等的,或者是虚拟调用,它可能无法对其进行优化。
这可能不是这种情况。使用您的第一个版本。它更易读,更容易调试。
如果有疑问,你可以编译成汇编或其他东西,看看是否有任何区别
答案 1 :(得分:0)
或者您可以立即传递整个结果。
如果some_func
看起来像:
void some_func(const glm::vec3& pos) {...}
然后你可以这样称呼它:
some_func(g_Camera->GetPosition());