首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >[]运算符的运算符重载

[]运算符的运算符重载
EN

Stack Overflow用户
提问于 2010-04-27 12:24:21
回答 6查看 419关注 0票数 2

为什么需要重载[]操作符?我从来没有遇到过有必要这样做的实际情况。有人能告诉我这方面的实际用例吗?

EN

回答 6

Stack Overflow用户

回答已采纳

发布于 2010-04-27 12:26:15

错误..。std::vector<t>std::basic_string<t>std::map<k, v>std::deque<t>

我将其用于表示注册表项的类,其中operator[]返回一个表示注册表值的对象,该对象的字符串位于[]之间。

另请参阅Spirit Parser Framework,它使用[]进行语义操作。

票数 8
EN

Stack Overflow用户

发布于 2010-04-27 12:33:49

任何可索引的容器都可以有效地定义operator[],以便在使用[]-syntax索引的任何模板中可用。

如果您不是在做泛型编程,那么就不需要语法糖--它可能看起来很不错,但是,除了美容之外,您总是可以定义特定的命名方法,如getAtsetAt等,具有相似且代码更简单的功能。

然而,泛型编程是现代C++的核心...它与“编译时、类型安全的鸭子类型”有一种可怕的相似之处(当然,我偏向于这种特殊的术语-- cfr wikipedia;-)。

正如您应该尝试使用前缀-*来表示对所有类型的迭代器和其他类似指针的类型的“取消引用”(这样它们就可以在模板中以鸭式方式替换指针!),同样地,您应该努力在容器类型中定义operator[],只要它有意义,就可以在适当的模板中以鸭式方式替换数组。

票数 4
EN

Stack Overflow用户

发布于 2010-04-27 12:26:27

如果您实现了几乎任何类型的容器,并提供对其元素的随机访问(或至少某种形式的键控访问)(例如,考虑std::vector),那么它将非常有用。

票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/2718724

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档