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