【发布时间】:2019-01-08 02:54:39
【问题描述】:
说我有:
int a = 1
int b = a
int& c = a
b 和 c 有什么区别? b 是 a 的单独副本吗?
【问题讨论】:
-
这是引用变量的初始化,而不是赋值。假设你有一些分号。
说我有:
int a = 1
int b = a
int& c = a
b 和 c 有什么区别? b 是 a 的单独副本吗?
【问题讨论】:
区别在于:
令人惊讶的是,您可以使用以下代码进行检查
int main()
{
int a =2;
int b =a;
int&c =a;
int d = 3;
c =d;
cout <<"a="<<a<<" b="<<b<<" c="<<c<<endl;
}
将打印
a=3 b=2 c=3
【讨论】:
这是三者之间的区别。当您将 b 分配为等于 a 时,您确实在创建一个单独的副本。但是,如果您要修改 a,那么 b 将保持不变。例如,如果要将 a 增加到 2,然后打印结果,a 将等于 2,但 b 仍将等于 1。另一方面,由于 c 被初始化为对 a 的引用。
每当 a 改变它的值时,c 也会改变它的值。您还可以通过更改 c 的值来更改 a 的值。有关指针和引用的更多信息,请阅读本文http://www.cplusplus.com/doc/tutorial/pointers/
这是一些示例代码
#include <iostream>
int main() {
int a = 1;
int b = a;
int &c = a;
std::cout << " a = " << a << ", b = " << b << ", and c = " << c << std::endl;
a++;
std::cout << " a = " << a << ", b = " << b << ", and c = " << c << std::endl;
}
输出:
a = 1, b = 1, and c = 1
(after increment) a = 2, b = 1, and c = 2
【讨论】: