参数参考或参数参考之间的差异?

时间:2016-07-15 14:32:10

标签: c++

我想知道将对象引用作为参数传递或作为参数传递是否有任何区别。以下代码是否相同?有没有我应该使用其中一种的情况?

void foo(Object &object){
    object.update()
}

 Object object
 foo(object)

VS

void bar(Object *object){
     object->update()
}

Object object
bar(&object)

2 个答案:

答案 0 :(得分:1)

你似乎有点困惑。没有一个示例按值传递。第一个示例通过引用传递,第二个示例通过指针传递。

主要区别是:

传递值foo(Object object):函数获取参数的副本,但不能更改原始文件。

通过引用传递foo(Object& object):该函数获取原始对象的引用(而不是复制)并可以对其进行修改。引用不能“无约束”,它们总是引用一个有效的对象(某些例外通常是错误)。

通过指针foo(Object* object)传递:作为引用传递,除了它对指向不引用任何内容的指针有效(如果你需要发信号那么它可以是nullptr。)< / p>

答案 1 :(得分:0)

当您通过引用进行操作时,可以内联函数,从理论上讲,编译器不需要生成实例的地址。根据您的类型,一元前缀operator&()可能不仅仅是返回this。此外,它对于指向nullptr的指针有效,您应该检查它(或使用gsl的not_null)。