fork download
/*****************************************************************
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;
}
Success #stdin #stdout 0s 15240KB
stdin
Standard input is empty
stdout
**Const**
num=1
**Non-Const**
**Const**
num=1