[英]Why does the variable lose its value after exiting for loop?
我是编程界的新手。 我在网上找不到任何相关的东西。 我的变量num
没有在for
循环内保存分配给它的值。
退出循环后一直为0。 我很确定我以前做过:在for
循环之前初始化一个变量,在for
for
之外使用它。
//num holds the number that shows how many values of
//... array A are bigger than the values on array B
int num{};
for (int i = 0; i < LINES; i++)
{
for (int j = 0; j < ROWS; j++)
{
num = (A[i][j] > B[i][j] ? num++ : num );
}
}
std::cout << num << " values of array A are bigger than"
<< " the values of array B" << '\n';
后递增num++
将递增num
但返回其旧值。
你可能是说
num = (A[i][j] > B[i][j] ? num + 1 : num );
或者,在我看来更短更清晰一点
if(A[i][j] > B[i][j]) { num++; }
在 for 循环中,您将分配给num
2 个可能值之一:
num = num;
这显然不会改变num
的值。
和:
num = num++;
在 C++17 之前,这是未定义的行为,代码可能会做任何事情。
从 C++17 开始,这个定义很好。 后增量的工作方式是首先从表达式返回num
的旧值。 这是0
。 然后num
递增到1
。 但是,旧的0
值随后被分配给左侧的num
,因此num
的值被重置为0
。
稍微重写num = num++
看起来像这样:
old = num; // old is 0
num++; // num is 1
num = old // num is 0
这使得正在发生的事情更清楚。
由于num
在循环内永远不会改变,因此循环退出时num
的值为0
。
您可以改为编写修改num
的行,如下所示:
num += (A[i][j] > B[i][j]);
num++
递增num
然后返回之前的值。 这意味着
num = num++;
等于
num = num;
您正在寻找++num
,它增加num
然后返回新值。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.