我期待addr addr 33 44
addr 可以是任何东西并且两者都是相同的。
在 gcc我明白了。但在 MSVC 我得到
8D3678 0 9257096 9257096
8D3678 0 9257104 9257104
8D3678 0 9257112 9257112
哇!?!我没有收到任何警告/错误。有谁愿意解释为什么最后两个值不是 33 44 以及为什么它们相同(而且非常错误)。
#include <cstdio>
#include <vector>
class Person{
public:
int age;
int weight;
Person(int age, int weight):age(age), weight(weight){}
};
int main() {
std::vector<Person> ls;
Person p(33, 44);
ls.push_back(p);
ls.push_back(p);
ls.push_back(p);
for(auto i=ls.begin();i!=ls.end();++i){
printf("%X %X %d %d\n", i, &(*i), (*i).age, (*i).weight);
}
}