C++ 对象指针按相反顺序打印结果

C++ 对象指针按相反顺序打印结果,c++,pointers,C++,Pointers,我试图使用指针来迭代对象数组。一次打印一个值似乎很好,但当我尝试将它们全部打印在一起时,结果是相反的 #include<iostream> using namespace std; class car{ int tires; public: car(int a) {tires = a;}; int GetTires(){return tires;}; }; int main() { car array[4] = { 2, 4, 6, 8 };

我试图使用指针来迭代对象数组。一次打印一个值似乎很好,但当我尝试将它们全部打印在一起时,结果是相反的

#include<iostream>
using namespace std;

class car{
    int tires;
public:
    car(int a) {tires = a;};
    int GetTires(){return tires;};
};

int main() {
    car array[4] = { 2, 4, 6, 8 };
    car *p;

    p = array;
    cout << ((p++)->GetTires()) << " " << ((p++)->GetTires()) << " " << ((p++)->GetTires())  << " "  << ((p++)->GetTires()) << endl;
   //Prints: 8 6 4 2 

    p = array;
    cout << ((p++)->GetTires()) << " ";
    cout << ((p++)->GetTires()) << " ";
    cout << ((p++)->GetTires()) << " ";
    cout << ((p++)->GetTires()) << " " << endl;
    //Prints: 2 4 6 8

    return 0;
}
#包括
使用名称空间std;
班车{
int轮胎;
公众:
汽车(INTA){轮胎=a;};
int GetTires(){返回轮胎;};
};
int main(){
car数组[4]={2,4,6,8};
car*p;
p=阵列;

cout GetTires())如果您使用的是比C++17更旧的编译器,那么
(p++)->GetTires()
求值的顺序在
std::cout::operator代码中


cout getires())还显示了一条警告:“警告:对'p'的操作可能未定义[-Wsequence point]”在对象数组中进行迭代——这不是真正的迭代。为什么不编写一个简单的循环,在其中递增指针,而不是假装迭代呢?好吧,我最初确实使用了for循环,它起了作用,但在发生这种情况时,我对指针进行了一些实验。
cout << i << i++; // undefined behavior (until C++17)
a[i] = i++; // undefined behavior (until C++17)
cout << ((p++)->GetTires()) << " " << ((p++)->GetTires()) << " " << ((p++)->GetTires())  << " "  << ((p++)->GetTires()) << endl;
    cout << ((p++)->GetTires()) << " ";
    cout << ((p++)->GetTires()) << " ";
    cout << ((p++)->GetTires()) << " ";
    cout << ((p++)->GetTires()) << " " << endl;
ostream& operator<<(ostream& os, const Type& dt)  
{  
    os << dt.value;  
    return os;  
}