性能:重载[]和调用函数

Performance: Overloaded [] and a call to a function

本文关键字:调用 函数 重载 性能      更新时间:2023-10-16

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

它们在本质上是一样的。重载操作符只是函数调用的一种独特语法。唯一改变的是调用它的代码的外观。

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

values[1]

也可以写成

values.operator[]( 1 )
//     ^^^^^^^^^^ This is effectively the name of your function.

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

然而,operator[]在历史上意味着(或者期望有)在内存中有一个连续的内部数据表示形式,或者更一般地作为容器数据结构的索引。因此,它通常在诸如向量、数组、矩阵等类中实现。