为什么 ((*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() 方法”,这就是您想要获得的行为。