#include <iostream>
#include <cassert>
using namespace std;
class IntList
{
private:
int m_list[10]{ 0 };
public:
// reference로 받는이유 값을 읽을수도 있고 값을 바꿀수도 있게하려고
// 항상 주소를 가지고 있는 lvalue가 들어와야 하기때문에
int& operator [] (const int index) {
// 디버깅으로 체크하기 쉽게 하고 퍼포먼스를 높이기 위해
assert(index >= 0);
assert(index < 10);
return m_list[index];
}
const int& operator [] (const int index) const
{
return m_list[index];
}
};
int main() {
IntList my_list;
my_list[3] = 10;
cout << my_list[3] << endl;
IntList* list = new IntList;
(*list)[3] = 10; // OK
// list[3] = 10; // NOT ok
return 0;
}