我经常使用引用来简化代码的外观:
vec3f& vertex = _vertices[index];
// Calculate the vertex position
vertex[0] = startx + col * colWidth;
vertex[1] = starty + row * rowWidth;
vertex[2] = 0.0f;
Run Code Online (Sandbox Code Playgroud)
编译器会识别并优化它,因此它基本上如下吗?
_vertices[index][0] = startx + col * colWidth;
_vertices[index][1] = starty + row * rowWidth;
_vertices[index][2] = 0.0f;
Run Code Online (Sandbox Code Playgroud)
是.这是任何现代(甚至是古老)编译器都将进行的基本优化.
事实上,我认为你编写一个优化是不正确的,因为将它转换为汇编的直接转换方式涉及到_vertex地址的存储,加上索引,再加上{0,1,2} (当然,乘以适当的尺寸).
总的来说,现代编译器是惊人的.几乎所有你能想到的优化都将得到实施.除非您知道某种方式对代码具有显着的性能优势,否则您应始终以强调可读性的方式编写代码.
举个简单的例子,代码如下:
int func() {
int x;
int y;
int z;
int a;
x = 5*5;
y = x;
z = y;
a = 100 * 100 * 100* 100;
return z;
}
Run Code Online (Sandbox Code Playgroud)
将优化到这个:
int func() {
return 25
}
Run Code Online (Sandbox Code Playgroud)
此外,编译器还将内联函数,以便不实际调用.相反,出现'func()'的地方只会被'25'取代.
这只是一个简单的例子.现代编译器实现了许多更复杂的优化.