728x90
#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;
}

 

728x90