警告"operation on <variable> may be undefined"



当我使用过载[] [] [] []运算符时,C 中的运算符创建最小矩阵类

class matrix {
private:
  vector<T> elems_;
  size_t         nrows_;
  size_t         ncols_;  
public:
  T const* operator[] ( size_t const r ) const { return &elems_[r * ncols_]; }
  T*       operator[] ( size_t const r )       { return &elems_[r * ncols_]; }  
  matrix ();
  matrix ( size_t const nr, size_t const nc ) 
    : elems_( nr * nc ), nrows_( nr ), ncols_( nc ) 
  { }
  matrix ( size_t const nr, size_t const nc, T const *data) 
    : elems_( nr * nc ), nrows_( nr ), ncols_( nc ) 
  { size_t ptr=0; 
    for (int i=0;i<nr;i++) 
        for (int j=0;j<nc;j++) 
             elems_[ptr] = data[ptr++]; 
  }
}

g 返回警告operation on ‘ptr’ may be undefined [-Wsequence-point]。在上一篇文章中为什么我要"操作"可能是不确定的。在C 中的语句表达中?可以解释说the last thing in the compound statement should be an expression followed by a semicolon,但没有其服务的目的。这是否意味着g++总是会对最终具有前面的复合语句发出此警告?

如果是这样,谁能解释为什么这很有用?我想不出任何理由,为什么应该建议任何人不要用for循环结束复合语句。

elems_[ptr] = data[ptr++]中,首先评估elems_[ptr]还是首先评估data[ptr++]是不确定的。就是这样,因为=不引入序列点。

根据顺序,elems_[ptr] = data[ptr++]产生不同的结果。因此警告。

相关内容

最新更新