为什么需要重载[]操作符?我从来没有遇到过有必要这样做的实际情况。有人能告诉我这方面的实际用例吗?
发布于 2010-04-27 12:26:15
错误..。std::vector<t>、std::basic_string<t>、std::map<k, v>和std::deque<t>?
我将其用于表示注册表项的类,其中operator[]返回一个表示注册表值的对象,该对象的字符串位于[]之间。
另请参阅Spirit Parser Framework,它使用[]进行语义操作。
发布于 2010-04-27 12:33:49
任何可索引的容器都可以有效地定义operator[],以便在使用[]-syntax索引的任何模板中可用。
如果您不是在做泛型编程,那么就不需要语法糖--它可能看起来很不错,但是,除了美容之外,您总是可以定义特定的命名方法,如getAt、setAt等,具有相似且代码更简单的功能。
然而,泛型编程是现代C++的核心...它与“编译时、类型安全的鸭子类型”有一种可怕的相似之处(当然,我偏向于这种特殊的术语-- cfr wikipedia;-)。
正如您应该尝试使用前缀-*来表示对所有类型的迭代器和其他类似指针的类型的“取消引用”(这样它们就可以在模板中以鸭式方式替换指针!),同样地,您应该努力在容器类型中定义operator[],只要它有意义,就可以在适当的模板中以鸭式方式替换数组。
发布于 2010-04-27 12:26:27
如果您实现了几乎任何类型的容器,并提供对其元素的随机访问(或至少某种形式的键控访问)(例如,考虑std::vector),那么它将非常有用。
https://stackoverflow.com/questions/2718724
复制相似问题