用成员初始化列表初始化类对象的引用变量?

时间:2021-05-20 11:22:44

标签: c++ reference initialization-list ctor-initializer

https://stackoverflow.com/a/8523361/11862989 从这个答案开始,这个问题就出现了。我觉得很小 那个答案有问题,所以我在那里评论了,但他没有回复(我指的是回答的家伙(190K 声誉))所以我在这里问那一小部分。

1.

.h

struct A
{
    private:
        int &i;
    public:
        A(int);
};

.cpp

A::A(int k1): i(k1)   
{
    std::cout<<&k1<<" "<<k1<<"\n";
    std::cout<<&i<<" "<<i<<"\n";
}

ma​​in.cpp

int main()
{
    int x=99;
    std::cout<<&x<<" "<<x<<"\n";
    A a1(x);
}

输出

0x72fe0c 99
0x72fde8 99
0x72fde8 99

2.

.h

struct A
{
    private:
        int &i;  // __change__
    public:
        A(int&);
};

.cpp

A::A(int &k1): i(k1)    // __change__
{
    std::cout<<&k1<<" "<<k1<<"\n";
    std::cout<<&i<<" "<<i<<"\n";
}

ma​​in.cpp

int main()
{
    int x=99;
    std::cout<<&x<<" "<<x<<"\n";
    A a1(x);
}

输出

0x72fe0c 99
0x72fe0c 99
0x72fe0c 99

2nd 代码中,因为我们通过 main 传递 x 的引用,它由 k1 收集。现在我们将 k1 的引用传递给 i。表示现在 i 指的是 k1,而 k1 指的是 x。表示间接 i 指的是 x 我对吗?

1st 我认为这里变量 x 的值通过 main 传递,并由变量 k1 收集,然后将 k1 的引用传递给变量 i。所以在这种情况下变量 i 指的是变量 k1 但变量 k 不是指变量 x 我是对的吗?

我在上面提到的那个人(190K 声誉)他使用了第一种方法来做到这一点,我认为他是错误的,__2nd__method 用于初始化类中对象的引用变量是正确的。我说得对吗?

0 个答案:

没有答案