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