为什么 ((*i)->getFirstName()) 有效,而不是 *i->getFirstName() 或 Employee[*i]getFirstName()?
Why does ((*i)->getFirstName()) work, as opposed to *i->getFirstName() or Employee[*i]getFirstName()?
为什么这行代码在这种情况下有效?
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
是迭代器对象,而不是数字索引,因此 Employee[i]
和 Employee[*i]
都是错误的(如您所见)。
关于 *i->getFirstName()
与 (*i)->getFirstName()
,->
运算符比 *
运算符具有 higher precedence。所以 *i->getFirstName()
会被解释为好像你写了 *(i->getFirstName())
,即“在 i
上执行 getFirstName()
方法,然后取消引用结果”。因为 i
是一个迭代器,并且没有 getFirstName()
方法,这不会编译。另一方面,(*i)->getFirstName()
将被解释为“取消引用 i
迭代器以获得 Employee*
,然后在它指向的对象上执行 getFirstName()
方法”,这就是您想要获得的行为。
为什么这行代码在这种情况下有效?
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
是迭代器对象,而不是数字索引,因此 Employee[i]
和 Employee[*i]
都是错误的(如您所见)。
关于 *i->getFirstName()
与 (*i)->getFirstName()
,->
运算符比 *
运算符具有 higher precedence。所以 *i->getFirstName()
会被解释为好像你写了 *(i->getFirstName())
,即“在 i
上执行 getFirstName()
方法,然后取消引用结果”。因为 i
是一个迭代器,并且没有 getFirstName()
方法,这不会编译。另一方面,(*i)->getFirstName()
将被解释为“取消引用 i
迭代器以获得 Employee*
,然后在它指向的对象上执行 getFirstName()
方法”,这就是您想要获得的行为。