Вы можете перегрузить оператор []
в пользовательском контейнере, чтобы обеспечить синтаксически / семантически более понятный способ доступа к элементам.
Например, my_container[3] = 9;
несколько яснее, чем my_container.set(3, 9);
Конечно, вы можете перегрузить []
, чтобы сделать что-нибудь по существу, но, вероятно, не стоит.Например, вы можете заставить my_object[3]
увеличивать my_object
на 3, но семантически оператор []
передает поиск по индексу, и всегда лучше, чтобы ваши интерфейсы соответствовали ожиданиям.
Вы можете использовать assert
для быстрой и грязной проверки границ;это приведет к беспорядочной смерти вашей программы, что всегда предпочтительнее, чем незначительное повреждение памяти.Преимущество заключается в том, что assert
- это макрос, который может быть скомпилирован из производственного кода. Это означает, что вы можете оплатить накладные расходы, связанные с проверкой границ вашего контейнера в процессе разработки, а не в производстве, без изменения вашего кода.