c++ - 如何更改指针访问运算符的含义

标签 c++ function operator-overloading operators multiple-definition-error

这可能是一个非常明显的问题,如果是这样请原谅。

我的项目中有以下代码片段,

#include <stdio.h>
class X
{
  public:
   int i;
   X() : i(0) {};
};

int main(int argc,char *arv[])
{
  X *ptr = new X[10];
  unsigned index = 5;
  cout<<ptr[index].i<<endl;
  return 0;
}

问题
我可以更改 ptr[index] 的含义吗?因为我需要返回 ptr[a[index]] 的值,其中 a 是用于子索引的数组。我不想修改现有的源代码。需要添加任何可以改变行为的新功能。

由于在我的代码中访问索引运算符的地方太多(准确地说是536个),并且索引下标运算符内部的公式很复杂,所以我不打算在很多地方更改代码。


附言:
1、我试过运算符重载,得出的结论是不可能。
2. 同样p[i]会被转化为*(p+i)。我无法重新定义基本运算符“+”。

所以只是想再次确认我的理解,以及是否有任何可能的捷径可以实现。
否则我需要通过更改每一行代码的皇家方法来修复它:)。

最佳答案

是的,不可能定义所有参数都是内置类型(包括原始指针)的自定义运算符。

此外,像这样以不明显的方式定义运算符几乎总是不是一个好主意。

您可能需要考虑将指向 X 的原始指针替换为行为类似的类。它可能更容易,具体取决于您的代码(例如,如果您有很多模板)。

关于c++ - 如何更改指针访问运算符的含义,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2897560/

相关文章:

按顺序省略最后一个元素

c++ - 重载 << 以输出 map 的 key_type 和 mapped_type

c++ - DirectX 9.0(世界坐标移动我的对象(三角形)动画

c++ - 通过 UV4L 数据通道的 unix 域套接字发送数据

c++ - 错误 - C++ 中的 "throws different exceptions"

class - 为什么 ifelse 将 data.frame 转换为列表 : ifelse(TRUE, data.frame(1), 0)) != data.frame(1)?

c++ - 从 CString 中提取 float

php - 如何调用类内部成员变量的__invoke方法

c++ - 重载多维括号

c++ - 模板类运算符重载返回类型