0

我最初对调用重载 [] 以获取成员数据和调用 getData(index) 之类的函数的性能的想法是相同的。由于调用 [] 本质上是一个函数调用。假设它们获取相同的数据,如 values[1] 和 values.getData(1) 将返回相同的值。我错了吗?如果它们执行相同,在这种情况下使用 [] 是否有非性能优势?

4

2 回答 2

3

它们是相同的,在引擎盖下。重载运算符只是函数调用的独特语法。唯一改变的是调用它的代码的外观。

您甚至可以强制操作员调用看起来像函数。

values[1]

也可以写成

values.operator[]( 1 )
//     ^^^^^^^^^^ This is effectively the name of your function.
于 2013-04-02T00:43:34.803 回答
1

正如您在问题中提到的那样,两者都是同一件事。重载只是函数调用。没有性能增益。

然而,operator[]从历史上看,这意味着(或预计会有)内存中存在连续的内部数据表示形式,或者更普遍地用作容器类数据结构的索引。因此,它通常在向量、数组、矩阵等类中实现。

于 2013-04-02T00:43:01.173 回答