我想知道将对象引用作为参数传递或作为参数传递是否有任何区别。以下代码是否相同?有没有我应该使用其中一种的情况?
void foo(Object &object){
object.update()
}
Object object
foo(object)
VS
void bar(Object *object){
object->update()
}
Object object
bar(&object)
答案 0 :(得分:1)
主要区别是:
传递值foo(Object object)
:函数获取参数的副本,但不能更改原始文件。
通过引用传递foo(Object& object)
:该函数获取原始对象的引用(而不是复制)并可以对其进行修改。引用不能“无约束”,它们总是引用一个有效的对象(某些例外通常是错误)。
通过指针foo(Object* object)
传递:作为引用传递,除了它对指向不引用任何内容的指针有效(如果你需要发信号那么它可以是nullptr
。)< / p>
答案 1 :(得分:0)
当您通过引用和进行操作时,可以内联函数,从理论上讲,编译器不需要生成实例的地址。根据您的类型,一元前缀operator&()
可能不仅仅是返回this
。此外,它对于指向nullptr的指针有效,您应该检查它(或使用gsl的not_null
)。