c++ - 当'operator double *'似乎可以完成工作时,为什么需要'operator []'
问题描述
operator[]
似乎是多余的,因为operator double*
似乎已经足够了。
这是我的代码:
struct CStandardData
{
inline operator double* () { return m_standardData; }
//inline double& operator [] (size_t ix) { return m_standardData[ix]; }
size_t m_standardDataRefCnt{ 0 };
double m_standardData[1];
} sd;
我sd
在各种不同的情况下使用,包括double *a = sd
, sd[x] = 5.0
,sd[x] >= sd[y]
等,并且无论我是否已operator []
注释掉或定义,代码似乎都可以正常工作。
在什么情况下需要有operator []
?
我可能应该添加一些上下文:
double sd[]
我在超过 5000 行的大型代码库中使用了动态分配的内部数据。然后我需要向这个双精度数组添加分配引用计数,因为需要复制它所在的对象,并将副本传递给用户(double sd[]
> 10000 个元素,所以我不想制作额外的副本)。这是我设计的方案,无需修改使用它的大量代码库,但不确定省略operator []
是否会导致任何问题。
解决方案
在什么情况下需要有操作符[]?
在您希望对象充当容器而不是指针的情况下。例如这段代码:
MyContainer cnt;
if( cnt ) // something
如果您定义operator double *
,将编译,但我不希望此代码一般为我的容器编译,因为它没有任何意义。
推荐阅读
- mysql - 如何用group by计算每行的字符数
- python - 在python中一次重新缩放多个变量
- php - Laravel Auth Guard 自定义尝试总是返回 null
- azure-storage - 帐户之间的 Azure 存储复制 - 按什么顺序?
- php - Zend 框架的版本是多少?
- ssl - 端到端加密 Nginx Ingress 控制器和 AWS NLB
- html - 在具有溢出属性的 div 内移动滚动部分
- python - 如何使所有条件(if,elif,else)在for循环中工作,在Python中使用try except
- c++ - “cc1plus: error: bad value ('tigerlake') for '-march=' switch” 编译错误
- mysql - 如何将选择查询设置为变量并在mysql的另一个选择查询中使用它