您不希望两个循环打印的地址相同吗?我是,我不明白为什么(有时)它们是不同的。
#include <iostream>
#include <vector>
using namespace std;
struct S {
void print_address() {
cout << this << endl;
}
};
int main(int argc,char *argv[]) {
vector<S> v;
for (size_t i = 0; i < 10; i++) {
v.push_back( S() );
v.back().print_address();
}
cout << endl;
for (size_t i = 0; i < v.size(); i++) {
v[i].print_address();
}
return 0;
}
我用许多本地和在线编译器测试了这段代码,得到的输出如下所示(最后三个数字始终相同):
0xaec010
0xaec031
0xaec012
0xaec013
0xaec034
0xaec035
0xaec036
0xaec037
0xaec018
0xaec019
0xaec010
0xaec011
0xaec012
0xaec013
0xaec014
0xaec015
0xaec016
0xaec017
0xaec018
0xaec019
我发现了这一点,因为在第一个循环中进行了一些初始化,我在程序的后续部分中获得了未初始化的对象。我错过了什么吗?