在面试测试中,对于以下代码:
void GetPosition(dummyClass& a, dummyClass& b) {
a = GetOrigin();
b = a + GetAxis().ToForward() * distance;
}
采访者写了以下评论:
如果使用out参数返回值,则不要使用参数 在函数内部,编译器通常会写入变量 记忆并从记忆中读回来。使用本地堆栈 变量,这允许编译器更好地优化并且仅写入 绝对需要时将数据存储到内存中。
我从未听说过我应该避免在函数内部使用引用参数。这是做C ++时常见的做法,还是一些非常具体的优化?如果是这样,是否有一些我可以阅读的具体文件可以涵盖这种情况?
答案 0 :(得分:0)
他是对的,但它非常微观优化。如果引用是局部变量,它们将在堆栈中非常接近并且可能仍然在缓存中,但它们可能是对远程堆对象的引用。
实际上你应该使用指针而不是引用返回,这样调用者可以立即看到值可能被写入。如果调用者想要丢弃值,则允许null是有意义的。因此,您自然会创建两个临时函数,然后在函数出口处保护指针写入,并使用null进行测试。