为什么在这种情况下星号位置有所不同,而其他情况则没有?

时间:2019-04-07 21:32:29

标签: c++ pointers vector

我正在Location类中创建一个Location类的指针成员向量,所以:

class Location //(simplified to prevent long code)
{
private:
std::string name, description;
int id;
std::vector<Item> items;

public:
Location();
~Location();

std::vector<Location*> nextLocations; //vector of pointers
};

为什么我的代码用

编译
std::vector<Location*> nextLocations;

但不使用

std::vector<Location> *nextLocations;

有什么区别?我以为

int* i; 

int *i;

是一样的吗?该向量还是不是位置指针的向量?除非参数将地址输入到某个位置,然后在nextLocations上执行push_back,否则我在Location类中名为addLoc()的成员函数将无法工作。但是当我push_back时,为什么必须使用

nextLocations.push_back(&location);

不是

nextLocations->push_back(&location);

nextLocations的每个元素都不应该是指针吗?

1 个答案:

答案 0 :(得分:2)

是的,int* i;int *i;是同一回事。但是,例如,括号外的内容(或等效内容)不相同。所以,

myfunc(i) + 7;

不同
myfunc(i + 7);

像括号一样思考<>。因此:

std::vector<Location *> nextLocations;

不同于:

std::vector<Location> *nextLocations;

如果您混淆了区别,那么第一个是位置指针的向量。第二个是指向位置向量的指针,该向量也不相同。确保选择正确的一个: