为什么这两个右值引用示例有不同的行为?

vla*_*don 5 c++ rvalue-reference

第一个例子

int a = 0;
auto && b = ++a;
++a;
cout << a << b << endl;
Run Code Online (Sandbox Code Playgroud)

版画 22

第二个例子

int a = 0;
auto && b = a++;
++a;
cout << a << b << endl;
Run Code Online (Sandbox Code Playgroud)

版画 20

问题: 为什么在第++a3行的第一个例子中也增加b,为什么在第二个例子中没有这样的行为?

更新:出现了 新问题.

Vio*_*ffe 10

因为pre-increment(++a)首先递增值a,存储结果,然后返回引用a.现在a,b有效地指向同一个对象.

a++但是,post-increment()首先a以临时值为增量存储当前值a,并返回此临时值 - 您的rvalue ref指向该临时值.a并且b指向不同的对象,更具体地说 - b是暂时保持a递增之前的值.

这就是为什么它鼓励使用的原因++it超过it++了定义递增/递减迭代器和其他复杂的对象:后者将创建一个临时拷贝,因此可能会比较慢.