为什么添加 "variable + 1" 不会为 for 循环中的每个循环增加 1 的值?(C++)



我很难理解为什么在C++中的for循环中使用增量运算符与使用"variable"+1有不同的结果。第二种情况下的变量在循环的每次迭代后都不会被记住:

取以下代码:

#include <iostream>
int main(){
int a{0};
for (int i = 0; i < 5; i++){
std::cout << ++a;
}
return 0;
}

它按预期输出:12345

但是,如果我用+1:替换++a

#include <iostream>
int main(){
int a{0};
for (int i = 0; i < 5; i++){
std::cout << a + 1;
}
return 0;
}

我得到:11111

即使我将"a"变量设为静态:

static int a{0};

它仍然输出11111。

为什么"a+1"在每次循环后都不保持其值?如果我想在每次迭代后保持它的值而不使用++(例如,使用另一个像*2这样的操作(,我需要做什么?

为什么"a+1"在每次循环后都不保留其值?

a + 1是一个不向a赋值的表达式。即a不受任何影响。这意味着当您只执行a + 1时,a的值仍然是0(旧值(。

另一方面,++a具有与相同的效果

v---------->assignment done here implicitly
a = a+1

在上面的表达式++a中,的值增加1,使得a的新值现在是1

++a等价于赋值a= a + 1(或a+= 1(。单独的表达式CCD_ 15不修改CCD_。

C++将允许您编写std::cout << (a= a + 1);

a++a+1不是一回事,而是与a=a+1是一回事
有什么区别?

好:
a+1包含值,该值比a的值高一
a=a+1意味着,除此之外,该值被分配给变量a,这意味着类似于">a替换为其值加1";。

这给出了以下可能性(我还展示了a++++a之间的差异(:

int a=3;
cout<<a+1; // output : 4. Value of 'a' equals 3.
cout<<a+1; // output : 4. Value of 'a' equals 3.
cout<<a+1; // output : 4. Value of 'a' equals 3.
int a=3;
cout<<a++;  // output : 3. Value of 'a' becomes 4 after having shown it on screen.
cout<<a++;  // output : 4. Value of 'a' becomes 5 after having shown it on screen.
cout<<a++;  // output : 5. Value of 'a' becomes 6 after having shown it on screen.
int a=3;
cout<<++a;  // output : 4. Value of 'a' becomes 4 before showning it on screen.
cout<<++a;  // output : 5. Value of 'a' becomes 5 before showning it on screen.
cout<<++a;  // output : 6. Value of 'a' becomes 6 before showning it on screen.

从概念上讲,像+*这样的内置算术运算符评估它们的操作数,用由此获得的值执行相应的运算,并创建一个包含结果的临时对象。

操作数,其中一个是a,只从中读取,而不是写入。当你考虑到+交换性时,这一点就更明显了,也就是说,它的操作数可以在不影响结果的情况下交换:根据定义,a+11+a相同,显然你不能将任何内容写回立即值1

通常,正如您所知,=在C和C++中用于向变量写入值。C、 通过祖先C++,提供将某些运算的结果写回其操作数之一的快捷方式:它是运算符和赋值=的组合,例如a += 1。像所有赋值一样,这是一个表达式(也就是说,它有一个值(,它在运算和赋值后具有变量的值。与所有其他表达式一样,您可以将其用作子表达式,尽管这不是很常见:cout << (a += 1);会达到所需的效果(括号是必要的,因为赋值的运算符优先级最低(。由于递增(和递减(1是非常常见的,C和C++有一个快捷方式:++aa+=1相同,因此通常会写cout << ++a;(这是一个避免使用括号的副作用(。

最新更新