当我在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++];
}
}
Run Code Online (Sandbox Code Playgroud)
g ++返回警告operation on ‘ptr’ may be undefined [-Wsequence-point].在上一篇文章中
为什么我在C++中的Statement Expression中得到"操作可能未定义"?它被解释,the last thing in the compound statement should be an expression followed by a semicolon但不是它服务的目的.这是否意味着g++总是会对最后有for循环的复合语句抛出此警告?
如果是这样,任何人都能解释为什么这有用吗 我想不出任何理由为什么应该建议任何人不要用for循环来结束复合语句.
在elems_[ptr] = data[ptr++],未定义elems_[ptr]是先评估还是data[ptr++]先评估.这是如此,因为=没有引入序列点.
根据订单,elems_[ptr] = data[ptr++]产生不同的结果.因此警告.
| 归档时间: |
|
| 查看次数: |
3821 次 |
| 最近记录: |