2

Possible Duplicate:
What's the difference between passing by reference vs. passing by value?

If I have a function that takes in some parameters and then does something with the parameters without needing to change their inherent value, is there any benefit from using pass by reference versus pass by value?

Community
  • 1
  • 1
Sara
  • 55
  • 2
  • I understand what the difference is. My question mostly pertains to when to use one or the other, but thanks for the thread link. It was pretty informative anyways. – Sara Dec 20 '11 at 07:36
  • @ Sara : This forum will help you to understand the difference between pass-by-value and pass-by-reference http://stackoverflow.com/questions/410593/pass-by-reference-value-in-c – karthik Dec 20 '11 at 07:37
  • @Sara: If you understand what the difference is, then when to use one or the other depends only on what you're doing. If you need the features of one, then use that. If you need the features of the other, then use that. – Nicol Bolas Dec 20 '11 at 07:50

2 Answers2

4

Yes. Passing by value copies the argument, which might be very expensive (or not even possible). If you want to pass by reference, but not modify the object, pass by const-reference.

As an example of an object that cannot be passed by value:

class Foo {
public:
    Foo() {}
private:
    Foo(const Foo&); // copy-constructor is not accessible
}
Björn Pollex
  • 75,346
  • 28
  • 201
  • 283
3

Here is the general guide:

  • Pass by reference when
    • You need to cause a side effect on the object that will be visible to the caller
    • or you cannot pass by value because of the lack of an accessible copy constructor or something and you need side effects
  • Pass by const reference when you have
    • A large object
    • and/or you cannot pass by value
    • and/or no need for side effects
  • Pass by value when
    • The object is small
    • and/or You do not need side effects
    • and/or You need a copy of the value to work with anyway
Seth Carnegie
  • 73,875
  • 22
  • 181
  • 249