#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 << "\ta2 = " << a2 << '\n';
// legal call
Func(a1, a2);
cout << "a1 = " << a1 << "\ta2 = " << a2 << '\n';
// legal call
Func(a1, 20);
cout << "a1 = " << a1 << "\ta2 = " << a2 << '\n';
/*
// ILLEGAL call
Func(20, a2);
cout << "a1 = " << a1 << "\ta2 = " << 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';
}
I2luY2x1ZGUgPGlvc3RyZWFtPgp1c2luZyBuYW1lc3BhY2Ugc3RkOwoKdm9pZCBGdW5jKGludCYgeCwgY29uc3QgaW50JiB5KTsgICAgLy8geCBDQU4gYmUgY2hhbmdlZC4gIHkgY2Fubm90CgoKaW50IG1haW4oKQp7CiAgIGludCBhMSA9IDUsIGEyID0gODsKICAgY291dCA8PCAiYTEgPSAiIDw8IGExIDw8ICJcdGEyID0gIiA8PCBhMiA8PCAnXG4nOwoKICAgLy8gbGVnYWwgY2FsbCAgIAogICBGdW5jKGExLCBhMik7CiAgIGNvdXQgPDwgImExID0gIiA8PCBhMSA8PCAiXHRhMiA9ICIgPDwgYTIgPDwgJ1xuJzsKCiAgIC8vIGxlZ2FsIGNhbGwKICAgRnVuYyhhMSwgMjApOwogICBjb3V0IDw8ICJhMSA9ICIgPDwgYTEgPDwgIlx0YTIgPSAiIDw8IGEyIDw8ICdcbic7CgoKLyoKICAgLy8gSUxMRUdBTCBjYWxsCiAgIEZ1bmMoMjAsIGEyKTsKICAgY291dCA8PCAiYTEgPSAiIDw8IGExIDw8ICJcdGEyID0gIiA8PCBhMiA8PCAnXG4nOwoqLwoKICAgcmV0dXJuIDA7Cn0KCgp2b2lkIEZ1bmMoaW50JiB4LCBjb25zdCBpbnQmIHkpCi8vIHggQ0FOIGJlIGNoYW5nZWQuICB5IGNhbm5vdAp7CiAgIHggPSB4ICogMjsKLy8gICB5ID0geSAqIDI7CQkvLyB0aGlzIGlzIGlsbGVnYWwKCiAgIGNvdXQgPDwgInggPSAiIDw8IHggPDwgJ1xuJzsKICAgY291dCA8PCAieSA9ICIgPDwgeSA8PCAnXG4nOwp9