Const int & method (int & parameter)

  • Thread starter Thread starter rootX
  • Start date Start date
  • Tags Tags
    Method Parameter
Join the discussion
Registration is free. Ask a follow-up in this thread, or start your own.
5 replies · 12K views
rootX
Messages
480
Reaction score
4
dec is a method that gets the parameter by reference, changes its value and returns a reference const int.

Problem [in bold]: In the book it says, "const means that that the object being returned cannot itself by modified later on." But, I changed the return value without any error.

Code:
#include <iostream>
using namespace std;

const int & dec (int & a)
{
    a = 5;
    return a;
}

int main()
{
    int a = 0;
    cout<<"a = "<<a<<endl;
    cout<<"Passing to the method ... "<<endl;
   [B] int b = dec(a);
    b = 6; //***I am chaning the returned type value****[/B]
    cout<<"a = "<<a<<" b = "<<b<<endl; 
    cout <<"Chaning a value ... "<<endl;
    a = 6;
    cout<<"a = "<<a<<endl;
    cout<<"Passing to the method ... "<<endl;
    b = dec(a);
    cout<<"a = "<<a<<" b = "<<b<<endl;
}
 
Physics news on Phys.org
rootX said:
But, I changed the return value without any error.
No you didn't: you changed b. b is not the return value of your function; it is merely an int value which was initialized to be a copy of the return value of your function.
 
Last edited:
Hurkyl said:
No you didn't: you changed b. b is not the return value of your function; it is merely an int value which was initialized to be a copy of the return value of your function.

oook thnx!
So, I was using operator = which makes a deep copy.

This throws error now that I cannot change const value ...
dec(a) = 5;

And that's why book was recommending to use

const int & b = dec(a);
rather than
int b =dec(a);

so that I avoid cost of copying.
:smile:
 
old versions of fortran were always fun with stuff like this:

call example(1.0)
b = 1.0
c = b+1.0
end

...

subroutine example(a)
a = 2.0
end

Yep no checking for changing of constants.
 
rootX said:
oook thnx!


const int & b = dec(a);
rather than
int b =dec(a);

so that I avoid cost of copying.
:smile:

What is the cost of copying ?
 
lonton said:
What is the cost of copying ?

I was talking about complex objects where you perform several operations to make the object copy like deleting all the pointers .. and then providing them new locations:

I need to override something like this function..
const & Object operator:= (const Object &rhs)
{

}