这些引用(&)只是节省内存或习语的问题,还是有理由说明为什么像这样的语句在通过副本传递时使用引用会完成同样的事情。
template <class T>
bool testGreater (const T& one, const T& two);
或像这样的对象声明:
Cars BMW (const Engine&); //where engine is a class
当不需要修改传递的项时,引用传递的作用是什么?
当您按值传递时,您必须制作对象的副本。根据用于实例化模板的对象,这可能会很昂贵。(或不可能。有些对象不可复制)
复杂类型的实例通常通过引用传递以节省开销。传递指针比重新创建整个数据结构要便宜得多。
无论您是否打算修改对象,这都是正确的。
通过引用传递始终有效,因为它不需要调用复制构造函数(可能不存在)并且不需要新对象(在函数体中)。但是,它并不总是更快,例如对于小型类型。
在您的第一个示例中,该函数是一个模板,并且由于我们不知道副本的成本或实际上的可能性,因此通过引用传递是唯一明智的选择。由于这是一个模板函数,它几乎肯定是内联的,当调用很可能被优化掉时,特别是如果T
是一个小对象。