#include <iostream>
using namespace std;
void Func( int & x, const int & y) ; // x CAN be changed. y cannot
int main( )
{
int a1 = 5 , a2 = 8 ;
cout << "a1 = " << a1 << "\t a2 = " << a2 << '\n ' ;
// legal call
Func( a1, a2) ;
cout << "a1 = " << a1 << "\t a2 = " << a2 << '\n ' ;
// legal call
Func( a1, 20 ) ;
cout << "a1 = " << a1 << "\t a2 = " << a2 << '\n ' ;
// ILLEGAL call
Func( 20 , a2) ;
cout << "a1 = " << a1 << "\t a2 = " << a2 << '\n ' ;
return 0 ;
}
void Func( int & x, const int & y)
// x CAN be changed. y cannot
{
x = x * 2 ;
y = y * 2 ; // this is illegal
cout << "x = " << x << '\n ' ;
cout << "y = " << y << '\n ' ;
}
I2luY2x1ZGUgPGlvc3RyZWFtPgp1c2luZyBuYW1lc3BhY2Ugc3RkOwoKdm9pZCBGdW5jKGludCYgeCwgY29uc3QgaW50JiB5KTsgICAgLy8geCBDQU4gYmUgY2hhbmdlZC4gIHkgY2Fubm90CgoKaW50IG1haW4oKQp7CiAgIGludCBhMSA9IDUsIGEyID0gODsKICAgY291dCA8PCAiYTEgPSAiIDw8IGExIDw8ICJcdGEyID0gIiA8PCBhMiA8PCAnXG4nOwoKICAgLy8gbGVnYWwgY2FsbCAgIAogICBGdW5jKGExLCBhMik7CiAgIGNvdXQgPDwgImExID0gIiA8PCBhMSA8PCAiXHRhMiA9ICIgPDwgYTIgPDwgJ1xuJzsKCiAgIC8vIGxlZ2FsIGNhbGwKICAgRnVuYyhhMSwgMjApOwogICBjb3V0IDw8ICJhMSA9ICIgPDwgYTEgPDwgIlx0YTIgPSAiIDw8IGEyIDw8ICdcbic7CgoKCiAgIC8vIElMTEVHQUwgY2FsbAogICBGdW5jKDIwLCBhMik7CiAgIGNvdXQgPDwgImExID0gIiA8PCBhMSA8PCAiXHRhMiA9ICIgPDwgYTIgPDwgJ1xuJzsKCgogICByZXR1cm4gMDsKfQoKCnZvaWQgRnVuYyhpbnQmIHgsIGNvbnN0IGludCYgeSkKLy8geCBDQU4gYmUgY2hhbmdlZC4gIHkgY2Fubm90CnsKICAgeCA9IHggKiAyOwogICB5ID0geSAqIDI7CQkvLyB0aGlzIGlzIGlsbGVnYWwKCiAgIGNvdXQgPDwgInggPSAiIDw8IHggPDwgJ1xuJzsKICAgY291dCA8PCAieSA9ICIgPDwgeSA8PCAnXG4nOwp9
compilation info
prog.cpp: In function 'int main()':
prog.cpp:23:15: error: invalid initialization of non-const reference of type 'int&' from an rvalue of type 'int'
Func(20, a2);
^
prog.cpp:4:6: note: in passing argument 1 of 'void Func(int&, const int&)'
void Func(int& x, const int& y); // x CAN be changed. y cannot
^
prog.cpp: In function 'void Func(int&, const int&)':
prog.cpp:35:6: error: assignment of read-only reference 'y'
y = y * 2; // this is illegal
^
stdout