# Const int & method (int & parameter)

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;
}

Related Programming and Computer Science News on Phys.org
Hurkyl
Staff Emeritus
Gold Member
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:
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.

rcgldr
Homework Helper
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.

oook thnx!

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

so that I avoid cost of copying.
What is the cost of copying ?

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)
{

}