为啥在这种情况下星号位置存在差异,而其他情况则没有?
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<Location*> nextLocations;
这是一个指向 Location 对象的向量,std::vector<Location> *nextLocations;
这是一个指向 Location 对象向量的指针。 int *i
和 int* i
是相同的,因为它只是空格,而在向量情况下则不然......
【参考方案1】:
是的,int* i;
和 int *i;
是一回事。但是,例如,括号外的东西(或等效的东西)是不一样的。所以,
myfunc(i) + 7;
不一样
myfunc(i + 7);
将<>
视为括号。因此:
std::vector<Location *> nextLocations;
不等于:
std::vector<Location> *nextLocations;
如果您对区别是什么感到困惑,第一个是位置指针向量。第二个是指向位置向量的指针,这又是不一样的。确保您选择了正确的:
【讨论】:
以上是关于为啥在这种情况下星号位置存在差异,而其他情况则没有?的主要内容,如果未能解决你的问题,请参考以下文章
为啥 vim 在制表符的位置绘制下划线以及如何避免这种情况?