C++ 在同一std::cout语句中递增两次

C++ 在同一std::cout语句中递增两次,c++,C++,我不知道为什么在第二种情况下输出是相反的。 这可能很简单,但我不认为我可以花钱 有更多的时间考虑这个问题。任何帮助/建议都可以 谢谢。注意:编译器是VS2012 double array[] = {10.0,20.0,30.0,40.0,50,60.0,70,80,90,100.0}; double *it = array; int size = 10; while(i<size) { std::cout << "First : " &l

我不知道为什么在第二种情况下输出是相反的。 这可能很简单,但我不认为我可以花钱 有更多的时间考虑这个问题。任何帮助/建议都可以 谢谢。注意:编译器是VS2012

double array[] = {10.0,20.0,30.0,40.0,50,60.0,70,80,90,100.0};
double *it = array;
int size = 10;
while(i<size) 
{               
    std::cout << "First : " <<  *it;
    it++;
    std::cout << "   Second : " << *it << std::endl; 
    it++;
    i++;        
}
//output
//First : 10.0  Second : 20.0
//First : 30.0  Second : 40.0
//...and so on

/*
while(i<size) 
{
std::cout << std::setprecision(15) << "First : " <<  *it++ << "   Second : " << *it++ <<  std::endl;
i++;
}
//Output is reversed in this case
//First : 20.0  Second : 10.0
//First : 40.0  Second : 30.0
//...and so on

*/
double array[]={10.0,20.0,30.0,40.0,50,60.0,70,80,90100.0};
double*it=数组;
int size=10;

虽然(i发生这种情况是因为赋值是按未定义的顺序进行的,但很可能这就是它显示反向值的原因。
来源:

这就解释了。我本能地认为它是从左到右的。谢谢,实际上,单个
std::cout
中的求值顺序是未定义的(换句话说,
+
发生的顺序)@itachi:each
是否有其他方法将其放在一行中?@itachi您可以使用索引而不是指针,因此
可能您注释掉的代码是未定义的行为。可能与@crashmstr重复:未注释的部分也是未定义的行为,读取时间远远超过数组的末尾。@MooingDuck true,还有其他问题s、 但我把重点放在了他们关于“排序”的具体问题上,其他问题也包括了这一点。