c++ - 指向类数据成员的指针

标签 c++ pointers

在这个小测试程序中,有人可以解释一下吗:

  • 为什么在两个循环中打印的每个地址都相同?
  • 为什么一个循环与另一个循环不同?

    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 次

最佳答案

如果你想看到相同的地址,你需要查看 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/

相关文章:

c++ - ostream 引用运算符 <<

c++ - 没有警告的返回语句后的代码

c++ - 取消引用存储在寄存器中的指针(Visual Studio)

具有成员初始值设定项列表的 C++ 结构构造函数

c++ - 表达式必须具有类类型。 - 类对象的 vector

objective-c - 使用 RubyMotion 处理指针

c - 从指向数组的指针使用 memcpy

pointers - 是否可以将接口(interface)对象传递给 interface{} 类型?

c - 指针地址和段错误

Windows 7下的C++指针