运算符重载[]

Exp*_*ice 3 c++ operator-overloading subscript-operator

可能需要重载下标运算符的场景是什么?

断言功能与此有什么关系?我在大多数情况下看到使用assert的下标重载,需要对此进行解释.

mea*_*gar 7

您可以[]在自定义容器上重载运算符,以提供访问元素的语法/语义更清晰的方式.

比如说my_container[3] = 9;有点清楚my_container.set(3, 9);

当然,你可以超载它[]来做任何事情,但你可能不应该.例如,您可以使my_object[3]增量增加my_object3,但从语义上讲,[]运算符会传递逐个索引,并且让接口符合预期总是更好.

您可以使用assert快速和脏的边界检查; 它会导致程序混乱,这总是比引入细微的内存损坏更可取.好处是,这assert是一个可以从生产代码中编译的宏,这意味着您可以支付边界的开销 - 在开发中检查容器而不是在生产中而不修改代码.