C++ C++;在for循环中为结构返回相同的引用 #包括 结构演示 { INTA; int b; }; int main() { 对于(int i=0;i

C++ C++;在for循环中为结构返回相同的引用 #包括 结构演示 { INTA; int b; }; int main() { 对于(int i=0;i,c++,C++,在第一个循环中创建一个Demo。当作用域离开时,它将被反构造。在第二个循环中,您将在不同的位置创建一个新的Demo 如果在循环之前创建演示,则将获得两个循环中显示的相同内存地址 #include <iostream> struct Demo { int a; int b; }; int main() { for(int i=0;i < 3; i++) { Demo d; d.a = i; st

在第一个循环中创建一个
Demo
。当作用域离开时,它将被反构造。在第二个循环中,您将在不同的位置创建一个新的
Demo

如果在循环之前创建
演示
,则将获得两个循环中显示的相同内存地址

#include <iostream>

struct Demo
{
    int a;
    int b;
};

int main()
{

    for(int i=0;i < 3; i++)
    {
        Demo d;
        d.a = i;
        std::cout  << "Reference of Demo " << &d << std::endl;
    }

    for(int i=0;i < 3; i++)
    {
        Demo d = {i};
        std::cout  << "Reference of Demo " << &d << std::endl;

    }
}
#包括
结构演示
{
INTA;
int b;
};
int main()
{
演示d;
对于(int i=0;i<3;i++)
{
d、 a=i;

std::我能理解循环1和循环2返回不同的引用吗?我的问题是在循环中获取相同的引用。循环1返回相同的引用3次,循环2也返回相同的引用3次。类
Demo
有两个不同的对象
d
。第一个循环中有一个,第二个循环中有一个第二种。因此,它们有不同的引用。允许编译器对生命周期不重叠的对象重复使用地址。编译器不需要这样做。它们都是相同的,或者都是不同的,或者其他一些组合都是同样有效的。
#include <iostream>

struct Demo
{
    int a;
    int b;
};

int main()
{
    Demo d;
    for(int i=0;i < 3; i++)
    {
        d.a = i;
        std::cout  << "Reference of Demo " << &d << std::endl;
    }

    for(int i=0;i < 3; i++)
    {
        std::cout  << "Reference of Demo " << &d << std::endl;

    }
}