[英]operator+ confusion (pointer vs. reference)
即使几年后,C ++也让我感到困惑。
virtual CStatCounter& operator= (CStatCounter const& inSC);
和
virtual CStatCounter operator+(const CStatCounter& rhs);
我保持
vector<CStatCounter*> mStatistics
别的地方。 现在我要做的就是累积所有值。 在被std :: accumulate嘲笑之后,我已经切换到了一个独立循环,仍然没有运气:
CStatCounter *iniCounter = new CStatCounter(0);
BOOST_FOREACH (CStatCounter *counter, mStatistics)
{
iniCounter = iniCounter+counter;
}
编译器(Xcode 4.2 / clang)抱怨
Invalid operands to binary expression ('CStatCounter *' and 'CStatCounter *')
我可以将循环体更改为counter + counter,但仍然失败,并显示相同的错误消息。
在引用和指针之间隐式转换是否足够聪明? 我在这里错过了一些琐碎的事情吗?
在引用和指针之间隐式转换是否足够聪明?
可以,但是不是C ++,对吗? 当您可以为每种可能的操作数组合重载运算符时,进行这样的假设确实不安全。
我在这里错过了一些琐碎的事情吗?
取消引用:
*iniCounter = *iniCounter + *counter;
顺便说一句,您仍然可以使用std :: accumulate,您只需要一个自定义二进制操作,如下所示:
CStatCounter MyAddFunc(const CStatCounter & lhs, const CStatCounter * rhsp)
{
return lhs + *rhsp;
}
*iniCounter = std::accumulate(mStatistics.begin(), mStatistics.end(),
*iniCounter, MyAddFunc);
*iniCounter = *iniCounter + *counter;
怎么样*iniCounter = *iniCounter + *counter;
?
附带说明一下,您确定所有这些指针和虚函数确实是必需的吗?
这里没有隐式转换。
您将必须提供要使用的确切重载。
virtual bool operator+(const CStatCounter* rhs);
virtual CStatCounter& operator= (CStatCounter const* inSC);
或修改您的代码以匹配您提供的重载。
*iniCounter = *iniCounter + *counter;
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.