C++ 预增量算子的性质

C++ 预增量算子的性质,c++,runtime,C++,Runtime,考虑以下代码: #include <iostream> #include <vector> using namespace std; int main(int argc, char **argv) { vector<int> v = { 1 }; auto it = v.begin(); cout << ++(*it) << " " << v[0] << " " << endl; c

考虑以下代码:

#include <iostream>
#include <vector>
using namespace std;

int main(int argc, char **argv) {
  vector<int> v = { 1 };
  auto it = v.begin();
  cout << ++(*it) << " " << v[0] << " " << endl;
  cout << v[0] << endl;
  return EXIT_SUCCESS;
}
鉴于
++(*it)
增加了第一个向量值,我希望得到以下输出:

2 2 
2
为什么增量没有反映在
v[0]
的第一个
cout
语句中?

原因是:

cout<<++(*it);
现在值
v[0]
递增,结果为
2

cout<< v[0]<<" ";
现在输出将是相同的。

原因是:

cout<<++(*it);
现在值
v[0]
递增,结果为
2

cout<< v[0]<<" ";
现在输出将是相同的。

原因是:

cout<<++(*it);
现在值
v[0]
递增,结果为
2

cout<< v[0]<<" ";
现在输出将是相同的。

原因是:

cout<<++(*it);
现在值
v[0]
递增,结果为
2

cout<< v[0]<<" ";
现在输出将是相同的。

+(*it)
将递增并返回它所引用的元素
,而不是迭代器本身,因此在计算该表达式之后,
v[0]
2

那么为什么它不打印
222
? 因为
操作符链
++(*it)
将递增并返回它所引用的元素
,而不是迭代器本身,所以
v[0]
在计算该表达式后为
2

那么为什么它不打印
222
? 因为
操作符链
++(*it)
将递增并返回它所引用的元素
,而不是迭代器本身,所以
v[0]
在计算该表达式后为
2

那么为什么它不打印
222
? 因为
操作符链
++(*it)
将递增并返回它所引用的元素
,而不是迭代器本身,所以
v[0]
在计算该表达式后为
2

那么为什么它不打印
222

因为
运算符链在表达式中没有一个定义的序列点来应用++运算符。我不明白为什么有人否决了我的问题?表达式中没有一个定义的序列点来应用++运算符。我不明白为什么有人否决了我的问题问题?表达式中没有一个已定义的序列点,在该序列点上应应用++运算符。我不明白为什么有人对我的问题投了反对票?表达式中没有一个已定义的序列点,在该序列点上应应用++运算符。我不明白为什么有人对我的问题投了反对票?你说得对事实上,它实际上是一个重载函数调用,对参数的求值没有任何保证。但这让我再次怀疑@tarunburgava left associative的左关联性概念只意味着什么
a你是对的,它实际上是一个重载函数调用,没有任何保证关于参数的求值。但这让我又一个疑问@Tarunburgava left associative的左结合性的概念只意味着
a你是对的,事实上它实际上是一个重载函数调用,并且没有关于参数求值的保证。但这让我又一个疑问,参数的求值是什么@tarunburgava left associative的左结合性概念只意味着
a你说得对,它实际上是一个重载函数调用,并且没有关于参数求值的保证。但这让我再次怀疑@tarunburgava left associative的左结合性概念只意味着什么
a