TIP: Be Careful with Dummy Reference Arguments

How many times have you used functions that return results through reference parameters, such as this:

void func(int & ra1, int & ra2, int & ra3) ;

You would probably call this function this way:

func(a1, a2, a3) ;

Sometimes, if you do not want the outputs of ra1 and ra2 arguments, but only interested in ra3, you might be tempted to make a call to the function as follows:

int dummy, res ;
func(dummy, dummy, res) ;

This way, you might end up saving the space that is required for that one extra int argument by using dummy in place of arguments a1 and a2. The function may even work properly. But, what's important to note is that if the output argument ra3 is dependent on the values already computed in ra1 and ra2 by func, you might be looking at an entirely different scenario. Take the following example implementation of func:

# include <iostream.h>

void
func(int & ra1, int & ra2, int & ra3)
{
   ra1 = 1 ;
   ra2 = 2 ;
   ra3 = ra1 + ra2 ;
}

void
main()
{
   int dummy, res ;
   func(dummy, dummy, res) ;

   cout << res ;
}

No points for guessing the output. It's not 3 (as expected), but 4. This is obviously due to ra1 and ra2 being allotted the same address, that of dummy. Disaster!! You would have successfully traded accuracy/correctness for a simple saving of 4 bytes in virtual space.

Therefore, in cases where you are not sure whether the values of one result parameter affects others, safely use different variables to hold output parameters, as in:

int  dummy1, dummy2, res ;
func(dummy1, dummy2, res) ;


About the Author

Ashwin Kumar

A mind that's ready to keep learning.

Comments

  • Is it not the other way round?

    Posted by prantlf on 02/24/2009 04:30pm

    A method implementation should not make assumptions how the parameters must be entered. Otherwise the implementation will be difficult to maintain and a cause of many difficult to find troubles. In this case, local variables should be used and the output parameters filled at the end. Don't let yourself discouraged and keep learning :-) Cheers, Ferda Prantl

    Reply
Leave a Comment
  • Your email address will not be published. All fields are required.

Top White Papers and Webcasts

  • Hybrid cloud platforms need to think in terms of sweet spots when it comes to application platform interface (API) integration. Cloud Velocity has taken a unique approach to tight integration with the API sweet spot; enough to support the agility of physical and virtual apps, including multi-tier environments and databases, while reducing capital and operating costs. Read this case study to learn how a global-level Fortune 1000 company was able to deploy an entire 6+ TB Oracle eCommerce stack in Amazon Web …

  • Event Date: April 15, 2014 The ability to effectively set sales goals, assign quotas and territories, bring new people on board and quickly make adjustments to the sales force is often crucial to success--and to the field experience! But for sales operations leaders, managing the administrative processes, systems, data and various departments to get it all right can often be difficult, inefficient and manually intensive. Register for this webinar and learn how you can: Align sales goals, quotas and …

Most Popular Programming Stories

More for Developers

Latest Developer Headlines

RSS Feeds