0

我可以用stackoverflow确认我对C++中引用的理解是正确的吗?

假设我们有

vector<int> a;
// add some value in a
vector<int> b = a; // 1. this will result another exact copy of inclusive of a's item to be copied in b right?
vector<int> &c = a;  // 2. c will reference a right? c and a both "point"/reference to a copy of vector list right?
vector<int> &d = c; // 3. d will reference c or/and a right? now a, c, d all reference to the same copy of variable 
vector<int> e = d;  // 4. e will copy a new set of list from d right (or you can say a or c)?

谢谢。

4

2 回答 2

4

你是对的,b是 的不同副本aa/c/d都是相同的东西,只是可以通过不同的名称访问。

并且ea/c/d.

如果您使用int类型而不是向量复制该代码,您可以通过地址看到幕后发生的事情:

#include <iostream>

int main() {
    int a = 7, b = a, &c = a, &d = a, e = d;

    std::cout << "a @ " << &a << '\n';
    std::cout << "b @ " << &b << '\n';
    std::cout << "c @ " << &c << '\n';
    std::cout << "d @ " << &d << '\n';
    std::cout << "e @ " << &e << '\n';

    return 0;
}

它的输出是:

a @ 0xbfaff524
b @ 0xbfaff520
c @ 0xbfaff524
d @ 0xbfaff524
e @ 0xbfaff51c

你可以看到a,c并且d都具有相同的地址,而be是不同的。

于 2013-08-28T07:42:19.127 回答
2

是的,看起来不错。

如果向c或中添加元素d,则新元素也将反映在 中a。如果您向 中添加元素e,则只有 e它们。

于 2013-08-28T07:44:18.900 回答