取消引用与阵列访问

时间:2013-02-28 22:39:34

标签: c++ gcc

我有一个有这个成员函数的类;

void AddTo(vertex** vrtList) {
  if(*vrtList != 0) {
    *vrtList->m_vrtLast = this;
  }
  m_vrtNext = *vrtList;  // save existing list, if any
  m_vrtLast = 0;
  *vrtList = this;
}

gcc给我一条错误信息;

  

错误:请求'* vrtList'中的成员'm_vrtLast',它是非类型'vertex *'

如果我用*vrtList->m_vrtLast替换vrtList[0]->m_vrtLast,编译器接受它,并且代码工作正常。

这是一个错误(在gcc中)还是一个功能(在C / C ++中)?

2 个答案:

答案 0 :(得分:3)

这不是错误,而是由于operator precedence。运营商->的优先级高于*,因此*vrtList->m_vrtLast*(vrtList->m_vrtLast)相同,这与您的意图不同。

[]->具有相同的优先权,但从左到右阅读,因此在[]之前遇到->

使用[](*vrtList)->m_vrtLast

答案 1 :(得分:2)

这是关于operator*的优先级。

*vrtList->m_vrtLast不等同于(*vrtList)->m_vrtLast,而是等同于*(m_vrtList->m_vertLast)

所以你必须相应地添加括号。