微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

为什么 ((*i)->getFirstName()) 有效,而不是 *i->getFirstName() 或 Employee[*i]getFirstName()?

如何解决为什么 ((*i)->getFirstName()) 有效,而不是 *i->getFirstName() 或 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()),即“在 getFirstName() 上执行 i 方法,然后取消引用结果”。因为 i是一个迭代器,并且没有 getFirstName() 方法,这不会编译。另一方面,(*i)->getFirstName() 将被解释为“取消引用 i 迭代器以获取 { {1}},然后在它指向的对象上执行 Employee* 方法”,这是您试图获得的行为。

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。