使用对象引用传输变量。有还是没有 &?
Transferring variables with object reference. With or without &?
#include <iostream>
class class1
{
public:int number = 2;
};
class class2
{
public:
void method(class1 &obj)
{
obj.number;
std::cout << obj.number;
}
};
int main()
{
class1 c1;
class2 c2;
c2.method(c1);
}
运行 和 void method(class1 &obj)
有或没有 &
有什么区别?
它会改变内存的使用吗?
我听说使用 &
很好,所以您不会得到 NullReferenceException
。
我仍然可以在没有 &
的情况下访问变量,所以我应该在这个愚蠢的例子中使用 & 吗?
为了让它变得非常简单,
按值传递意味着传递实际值。因此,您需要将此值复制到一个变量中才能使用它。
void method(class1 obj)
通过引用传递意味着传递一个数字(称为地址),它定义了值的存储位置。
传递地址,然后不进行任何复制,修改实际对象。
void method(class1 &obj)
按引用传递被认为比按值传递更有效,因为它不会将参数复制到相同类型的新变量(因为它使用实际对象)。
另请注意,按值传递不会修改真实对象(仅副本)。一个很好的例子是 ̀swap two variables`
如下:
void swap(int a, int b)
{
int t;
t = b;
b = a;
a = t;
}
如果您使用 `swap(x,y)̀ 在 main
函数中按值调用,则初始值(调用前)和最终值(调用后)不会交换。
但是,如果您通过引用 void swap(int& a, int& b)
来定义函数(函数体中没有任何变化),您会看到调用 swap(x,y)
确实会将两个变量交换为操作。
#include <iostream>
class class1
{
public:int number = 2;
};
class class2
{
public:
void method(class1 &obj)
{
obj.number;
std::cout << obj.number;
}
};
int main()
{
class1 c1;
class2 c2;
c2.method(c1);
}
运行 和 void method(class1 &obj)
有或没有 &
有什么区别?
它会改变内存的使用吗?
我听说使用 &
很好,所以您不会得到 NullReferenceException
。
我仍然可以在没有 &
的情况下访问变量,所以我应该在这个愚蠢的例子中使用 & 吗?
为了让它变得非常简单, 按值传递意味着传递实际值。因此,您需要将此值复制到一个变量中才能使用它。
void method(class1 obj)
通过引用传递意味着传递一个数字(称为地址),它定义了值的存储位置。 传递地址,然后不进行任何复制,修改实际对象。
void method(class1 &obj)
按引用传递被认为比按值传递更有效,因为它不会将参数复制到相同类型的新变量(因为它使用实际对象)。
另请注意,按值传递不会修改真实对象(仅副本)。一个很好的例子是 ̀swap two variables` 如下:
void swap(int a, int b)
{
int t;
t = b;
b = a;
a = t;
}
如果您使用 `swap(x,y)̀ 在 main
函数中按值调用,则初始值(调用前)和最终值(调用后)不会交换。
但是,如果您通过引用 void swap(int& a, int& b)
来定义函数(函数体中没有任何变化),您会看到调用 swap(x,y)
确实会将两个变量交换为操作。