【发布时间】:2021-03-29 13:48:14
【问题描述】:
为什么这行代码在这种情况下有效?
cout << ((*i)->getFirstName());
上下文
class Employee{
private:
string FirstName;
public:
Employee(string FirstName);
void setFirstName(string FName) {
FirstName = FName;
}
string getFirstName(){
return FirstName;
}
} //End of Class
在主要(名字已经设置和员工填写)
vector<Employee *> Employees;
Employees.push_back(new Employee(FirstName));
for (vector<Employee *>::iterator i = Employees.begin(); i < Employees.end(); i++) {
cout << ((*i)->getFirstName());
}
我的问题是为什么上面的行有效,而不是以下任何一个?
cout << Employee[*i]->getFirstName();
cout << Employee[i]->getFirstName();
cout << *i->getFirstName();
【问题讨论】:
-
i是一个迭代器,您不能使用operator[]( iterator )访问vector元素。操作顺序是->优先于*,所以->先发生。 -
运算符优先级或操作顺序。它还有助于了解您正在使用的类型,因为您认为应该工作的前两个调用是 100% 虚假的。
-
Employee[i]如果i是整数索引,例如for (int i = 0; i < Employees.size(); i++)
标签: c++ class pointers vector dereference