为啥在这种情况下星号位置存在差异,而其他情况则没有?

Posted

技术标签:

【中文标题】为啥在这种情况下星号位置存在差异,而其他情况则没有?【英文标题】:Why is there a difference in asterisk location in this case, but not others?为什么在这种情况下星号位置存在差异,而其他情况则没有? 【发布时间】:2019-04-07 21:32:28 【问题描述】:

我在 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;

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

nextLocations.push_back(&location);

而不是

nextLocations->push_back(&location);

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

【问题讨论】:

因为它们的含义不同,std::vector&lt;Location*&gt; nextLocations; 这是一个指向 Location 对象的向量,std::vector&lt;Location&gt; *nextLocations; 这是一个指向 Location 对象向量的指针。 int *iint* i 是相同的,因为它只是空格,而在向量情况下则不然...... 【参考方案1】:

是的,int* i;int *i; 是一回事。但是,例如,括号外的东西(或等效的东西)是不一样的。所以,

myfunc(i) + 7;

不一样

myfunc(i + 7);

&lt;&gt; 视为括号。因此:

std::vector<Location *> nextLocations;

不等于:

std::vector<Location> *nextLocations;

如果您对区别是什么感到困惑,第一个是位置指针向量。第二个是指向位置向量的指针,这又是不一样的。确保您选择了正确的:

【讨论】:

以上是关于为啥在这种情况下星号位置存在差异,而其他情况则没有?的主要内容,如果未能解决你的问题,请参考以下文章

在没有多个连接的情况下查找两个表中的差异

为啥每当我尝试安装VSCode都会出现这种情况?

期望值的差异问题

为啥 vim 在制表符的位置绘制下划线以及如何避免这种情况?

为啥在没有 ref 的情况下将 list 传递给一个类似于通过 ref 传递的函数?

Python - 为啥在这种情况下“is”运算符返回 true? [复制]