【发布时间】:2012-01-19 14:22:16
【问题描述】:
如果我定义一个指向定义[] 运算符的对象的指针,是否有直接的方法可以从指针访问该运算符?
例如,在下面的代码中我可以使用指针的-> 运算符直接访问Vec 的成员函数(如empty()),但是如果我想访问[] 运算符我需要首先获取对象的引用,然后调用操作符。
#include <vector>
int main(int argc, char *argv[])
{
std::vector<int> Vec(1,1);
std::vector<int>* VecPtr = &Vec;
if(!VecPtr->empty()) // this is fine
return (*VecPtr)[0]; // is there some sort of ->[] operator I could use?
return 0;
}
我很可能错了,但看起来(*VecPtr).empty() 的效率低于VecPtr->empty()。这就是为什么我一直在寻找 (*VecPtr)[] 的替代品。
【问题讨论】:
-
为什么要避开
(*VecPtr)[0]? -
@Rob 编辑是有原因的。我的假设可能是错误的,但这就是我问的原因。
-
(*VecPtr).empty()和VecPtr->empty()是完全一样的东西(除非 VecPtr 是重载operator*和operator->具有冲突含义的东西。 -
如果
VecPtr是指针类型,那么(*VecPtr).XXX根据定义等同于VecPtr->XXX。没有效率损失。如果VecPtr是实现operator*和operator[]的非指针类型,那么您必须检查它们以查看哪个更有效(它们可能相同)。 -
这个问题是如何获得投票的?它基于最不知情和研究不足的前提之一,对其他人几乎没有价值。