may be undefined"-6ren"> may be undefined"-当我使用overloading [][] operators in c++时创建一个最小矩阵类 class matrix { private: vector elems_; size_t -6ren">
gpt4 book ai didi

g++ - 警告 "operation on may be undefined"

转载 作者:行者123 更新时间:2023-12-02 21:14:48 25 4
gpt4 key购买 nike

当我使用overloading [][] operators in 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++ 返回警告对“ptr”的操作可能未定义[-Wsequence-point]。在上一篇文章中 Why I got "operation may be undefined" in Statement Expression in C++?据解释,复合语句中的最后一个内容应该是一个表达式,后跟一个分号,但不包括它的用途。这是否意味着 g++ 总是会对末尾有 for 循环的复合语句抛出此警告?

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

最佳答案

elems_[ptr] = data[ptr++]中,未定义先评估elems_[ptr]还是先评估data[ptr++] 首先被评估。之所以如此,是因为 = 没有引入序列点。

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

关于g++ - 警告 "operation on <variable> may be undefined",我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21625554/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com