在这个小测试程序中,有人可以解释一下吗:
- 为什么在两个循环中打印的每个地址都相同?
为什么一个循环与另一个循环不同?
struct A { A(){ std::cout << &v << "\n"; }; int v; }; int main() { std::vector<A> vec; int i = 10; while (i--) vec.push_back(A()); for (A b : vec) std::cout << &(b.v) << "\n"; while (true); return 0; }
我实际上希望看到 10 个不同的地址重复 2 次p>
最佳答案
如果你想看到相同的地址,你需要查看 vector 内部的地址,而不是临时拷贝的地址。
使用 vector::emplace_back
,您可以在构建过程中看到 vector 内部的地址(参见 emplace_back )。引用访问为您提供迭代期间 vector 内的地址。
int main()
{
std::vector<A> vec;
int i = 10;
while (i--)
vec.emplace_back();
for (const A& b : vec)
std::cout << &(b.v) << "\n";
...
}
关于c++ - 指向类数据成员的指针,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40692512/