/*****************************************************************
Name : 重載下標符號 const 函式
Date : 2017/02/20
By : CharlotteHonG
Final: 2017/02/20
*****************************************************************/
#include <iostream>
#include <vector>
#include <numeric>
using namespace std;
class Arr{
public:
// 建構子
Arr(int len): arr(len){
iota(arr.begin(),arr.end(),1);
}
// 重載下標符號
int & operator[](size_t idx){
cout << "**Non-Const**" << endl;
return const_cast<int&>(static_cast<const Arr&>(*this)[idx]);
}
const int & operator[](size_t idx) const{
cout << "**Const**" << endl;
return arr[idx];
}
private:
vector<int> arr;
};
void pri(const int & num){
cout << "num=" << num << endl;
}
int main(){
const Arr ca(5);
pri(ca[0]);
Arr a(5);
pri(a[0]);
return 0;
}
LyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCk5hbWUgOiDph43ovInkuIvmqJnnrKbomZ8gY29uc3Qg5Ye95byPCkRhdGUgOiAyMDE3LzAyLzIwCkJ5ICAgOiBDaGFybG90dGVIb25HCkZpbmFsOiAyMDE3LzAyLzIwCioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwojaW5jbHVkZSA8aW9zdHJlYW0+CiNpbmNsdWRlIDx2ZWN0b3I+CiNpbmNsdWRlIDxudW1lcmljPgoKdXNpbmcgbmFtZXNwYWNlIHN0ZDsKCmNsYXNzIEFycnsKcHVibGljOgogICAgLy8g5bu65qeL5a2QCiAgICBBcnIoaW50IGxlbik6IGFycihsZW4pewogICAgICAgIGlvdGEoYXJyLmJlZ2luKCksYXJyLmVuZCgpLDEpOwogICAgfQogICAgLy8g6YeN6LyJ5LiL5qiZ56ym6JmfCiAgICBpbnQgJiBvcGVyYXRvcltdKHNpemVfdCBpZHgpewogICAgCWNvdXQgPDwgIioqTm9uLUNvbnN0KioiIDw8IGVuZGw7CiAgICAgICAgcmV0dXJuIGNvbnN0X2Nhc3Q8aW50Jj4oc3RhdGljX2Nhc3Q8Y29uc3QgQXJyJj4oKnRoaXMpW2lkeF0pOwogICAgfQogICAgY29uc3QgaW50ICYgb3BlcmF0b3JbXShzaXplX3QgaWR4KSBjb25zdHsKICAgICAgICBjb3V0IDw8ICIqKkNvbnN0KioiIDw8IGVuZGw7CiAgICAgICAgcmV0dXJuIGFycltpZHhdOwogICAgfQpwcml2YXRlOgogICAgdmVjdG9yPGludD4gYXJyOwp9OwoKdm9pZCBwcmkoY29uc3QgaW50ICYgbnVtKXsKICAgIGNvdXQgPDwgIm51bT0iIDw8IG51bSA8PCBlbmRsOwp9CmludCBtYWluKCl7CiAgICBjb25zdCBBcnIgY2EoNSk7CiAgICBwcmkoY2FbMF0pOwogICAgQXJyIGEoNSk7CiAgICBwcmkoYVswXSk7CiAgICByZXR1cm4gMDsKfQ==