C+中的参考行为+; 我可以用StcExpRoad确认C++中引用的内容是否正确。

C+中的参考行为+; 我可以用StcExpRoad确认C++中引用的内容是否正确。,c++,reference,C++,Reference,假设我们有 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"

假设我们有

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)?
向量a;
//在一个公司里增加一些价值
向量b=a;//1.这将导致在b中复制另一个精确副本,包括a的项目,对吗?
向量&c=a;//2.c将引用一项权利吗?c和a都是“点”/参考向量列表的副本,对吗?
向量&d=c;//3.d参考c或/和a权利?现在,a、c、d都引用同一个变量副本
向量e=d;//4.e将从d右边复制一组新列表(或者你可以说a或c)?

谢谢

没错,
b
a
的不同副本,
a/c/d
都是一样的,只是可以通过不同的名称访问

e
a/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
c
d
都有相同的地址,而
b
e
是不同的。

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

e
a/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
c
d
都有相同的地址,而
b
e
是不同的。

是的,看起来不错

如果将元素添加到
c
d
,新元素也将反映在
a
中。 如果将元素添加到
e
,则只有
e
才会有这些元素。

是的,看起来不错

如果将元素添加到
c
d
,新元素也将反映在
a
中。
如果将元素添加到
e
,则只有
e
才会有元素。

我还可以检查常量向量a下的添加常数;向量b=a;b可以复制吗?@henry,当然,你会发现你添加到
a/c/d
的任何内容都会反映在这三个代码中,就像在上面的代码中将a设置为42一样,它也会“设置”
c
d
。那是因为没有三件事,只有一件事有三个名字。用任何其他名字命名的玫瑰仍然是完全相同的玫瑰,这是对吟游诗人的错误引用。我是否可以检查常量向量A下的加常数;向量b=a;b可以复制吗?@henry,当然,你会发现你添加到
a/c/d
的任何内容都会反映在这三个代码中,就像在上面的代码中将a设置为42一样,它也会“设置”
c
d
。那是因为没有三件事,只有一件事有三个名字。用任何其他名字称呼的玫瑰仍然是完全相同的玫瑰,这是对吟游诗人的错误引用。