fork download
  1. /*****************************************************************
  2. Name : 重載下標符號 const 函式
  3. Date : 2017/02/20
  4. By : CharlotteHonG
  5. Final: 2017/02/20
  6. *****************************************************************/
  7. #include <iostream>
  8. #include <vector>
  9. #include <numeric>
  10.  
  11. using namespace std;
  12.  
  13. class Arr{
  14. public:
  15. // 建構子
  16. Arr(int len): arr(len){
  17. iota(arr.begin(),arr.end(),1);
  18. }
  19. // 重載下標符號
  20. int & operator[](size_t idx){
  21. cout << "**Non-Const**" << endl;
  22. return const_cast<int&>(static_cast<const Arr&>(*this)[idx]);
  23. }
  24. const int & operator[](size_t idx) const{
  25. cout << "**Const**" << endl;
  26. return arr[idx];
  27. }
  28. private:
  29. vector<int> arr;
  30. };
  31.  
  32. void pri(const int & num){
  33. cout << "num=" << num << endl;
  34. }
  35. int main(){
  36. const Arr ca(5);
  37. pri(ca[0]);
  38. Arr a(5);
  39. pri(a[0]);
  40. return 0;
  41. }
Success #stdin #stdout 0s 15240KB
stdin
Standard input is empty
stdout
**Const**
num=1
**Non-Const**
**Const**
num=1