C++;更改变量的引用 我对C++是相当新的,来自java。我读过指针之类的东西,但我只是想确保我完全理解。请原谅这个基本问题。如果我有此代码: vector<int> S = someVector; vector<int> bestS = S; S = anotherVector; vector S=someVector; 向量bestS=S; S=另一个向量;

C++;更改变量的引用 我对C++是相当新的,来自java。我读过指针之类的东西,但我只是想确保我完全理解。请原谅这个基本问题。如果我有此代码: vector<int> S = someVector; vector<int> bestS = S; S = anotherVector; vector S=someVector; 向量bestS=S; S=另一个向量;,c++,C++,BEST是否被重新分配给其他载体?我不这么认为,但因为我读到改变指针变量的去引用会如何改变指向该数据的其他指针的底层数据,所以我有点不确定 我想我也在问,对象变量名是否作为指针 BEST是否被重新分配给其他载体 不。按照您编写示例的方式,bestS是S的完整独立副本,因此当您将另一个向量分配给S时,S将成为另一个向量的新独立副本,清除存储在S中的先前数据,并将数据从另一个向量复制到S中bestS完全不受您对S所做的任何操作的影响 现在,如果您将变量(或至少bestS)声明为引用,那么它将按照您的

BEST是否被重新分配给其他载体?我不这么认为,但因为我读到改变指针变量的去引用会如何改变指向该数据的其他指针的底层数据,所以我有点不确定

我想我也在问,对象变量名是否作为指针

BEST是否被重新分配给其他载体

不。按照您编写示例的方式,
bestS
S
的完整独立副本,因此当您将
另一个向量
分配给
S
时,
S
将成为
另一个向量
的新独立副本,清除存储在
S
中的先前数据,并将数据从
另一个向量
复制到
S
bestS
完全不受您对
S
所做的任何操作的影响

现在,如果您将变量(或至少
bestS
)声明为引用,那么它将按照您的想法运行:

vector<int> &bestS = S;
BEST是否被重新分配给其他载体

不。按照您编写示例的方式,
bestS
S
的完整独立副本,因此当您将
另一个向量
分配给
S
时,
S
将成为
另一个向量
的新独立副本,清除存储在
S
中的先前数据,并将数据从
另一个向量
复制到
S
bestS
完全不受您对
S
所做的任何操作的影响

现在,如果您将变量(或至少
bestS
)声明为引用,那么它将按照您的想法运行:

vector<int> &bestS = S;

指针的行为就像指针一样
int*p=newint{5}
inti=5 STD::UnQuyJPPT= STD::MaMaIO唯一(5);<代码>用
int
double
替换
vector
int
double
的答案同样适用于
vector
。C++不改变<代码> = /COD>的规则,只是因为类型看起来“复杂”。
=
右侧的值分配给
=
左侧的变量。在我看来,这使得
=
以一致的方式运行,这与Java中的
=
不同,Java中的
=
根据类型有双重含义。指针的行为就像指针一样
int*p=newint{5}
inti=5 STD::UnQuyJPPT= STD::MaMaIO唯一(5);<代码>用
int
double
替换
vector
int
double
的答案同样适用于
vector
。C++不改变<代码> = /COD>的规则,只是因为类型看起来“复杂”。
=
右侧的值分配给
=
左侧的变量。在我看来,这使得
=
以一致的方式运行,不像Java中的
=
,在Java中,
=
根据类型有双重含义。我认为在这里最好小心。最后的<代码> s=另一个向量< />不将代码< >代码>重新分配为<代码>另一个向量< /代码>,与C++ ++ >代码> int >代码>或java >代码>对象< /代码>相同。它实际上只是一个方法调用:
s.operator=(另一个向量)
,指向对象
S
的命令,以成为对象
另一个向量的副本。
S
引用的对象不会被丢弃和替换。只是告诉对象处理它的所有数据,并用另一个向量的副本替换它。再加上这个答案,如果你有一个值类型
T
std::vector
),那么对
T
的引用将被写成
T&
std::vector&
)指向
T
的指针应该是
T*
(std::vector*)>。所以当你说“bestS是S的完全独立副本”时,你是说底层对象被复制了?我只是想确保,因为我在Java中学习的方式类似于
Array
不是一个基本类型(即,它是一个引用类型),所以我发布的内容本质上是一个指针?当你键入
S=anotherVector
时,
另一个vector
的内容被复制到
S
。您发布的内容与指针无关,因为您所有的变量都是值类型。因此,如果它是内容副本,如果我这样做:
S.add(1)
,而不是使用
S=anotherVector
重新分配
S
,更改是否会影响
bestS
?我认为在这里最好小心。最后的<代码> s=另一个向量< />不将代码< >代码>重新分配为<代码>另一个向量< /代码>,与C++ ++ >代码> int >代码>或java >代码>对象< /代码>相同。它实际上只是一个方法调用:
s.operator=(另一个向量)
,指向对象
S
的命令,以成为对象
另一个向量的副本。
S
引用的对象不会被丢弃和替换。只是告诉对象处理它的所有数据,并用另一个向量的副本替换它。再加上这个答案,如果你有一个值类型
T
std::vector
),那么对
T
的引用将被写成
T&
std::vector&
)指向
T
的指针应该是
T*
(std::vector*)>。所以当你说“bestS是S的完全独立副本”时,你是说底层对象被复制了?我只是想确认一下,从我在