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 []
?我可能应该添加一些背景信息:
我在整个大量代码(>5000行)中使用了动态分配的内部数据
double sd[]
。然后,由于需要复制包含它的对象并将副本传递给用户(double sd[]
具有>10000个元素,因此我不想多做副本),我需要向这个双精度数组添加分配引用计数。这是我设计的方案,可以在不必修改使用它的大量代码的情况下实现,但我不确定省略operator []
是否会导致任何问题。
double at(size_t ix) const { return m_standardData[ix]; }
。依赖隐式转换是个人偏好或团队指南的问题。我更喜欢显式而非隐式,但这在C++中绝非标准做法。 - Eljay