我开始阅读一本关于C++的书,发现了以下代码。 这是有关如何通过引用发送传递参数的示例。
#include <iostream>
void swap(int &x, int &y);
int main()
{
int x = 5, y = 10;
std::cout << "Main. Before swap, x: " << x
<< " y: " << y << "\n";
swap(x, y);
std::cout << "Main. After swap, x: " << x
<< " y: " << y << "\n";
return 0;
}
void swap(int &rx, int &ry)
{
int temp;
std::cout << "Swap. Before swap, rx: " << rx
<< " ry: " << ry << "\n";
temp = rx;
rx = ry;
ry = temp;
std::cout << "Swap. After swap, rx: " << rx
<< " ry: " << ry << "\n";
}
.
Main. Before swap, x:5 y: 10
Swap. Before swap, rx:5 ry:10
Swap. After swap, rx:10 ry:5
Main. After swap, x:10, y:5
逻辑对我来说很清楚。 现在这可能是一个非常愚蠢的问题(我还不是很有经验),但是为什么不能直接声明 private: int x 作为实例变量呢?在这种情况下,x 不是可以在类中的任何地方直接访问吗? (根本不需要指定参数)?预先感谢您的回答!
最佳答案
出于多种原因。
- 您应该在最窄的位置声明变量 scope可能的。为什么?看2和3
- 变量很昂贵,它们占用内存,你只需要它们 只要您需要它们。
- 变量 scope 越大(即变量可见的代码量 到)您错误使用的可能性就越大 变量,因此它的值可能会意外改变。这将是一个错误,祝你好运,找到那个错误。
- Tight coupling (这不好)。如果你编写一个类并在其上放置一个交换方法
类,并且您编写它,以便它使用实例成员 x (而不是方法
变量 x),那么该交换方法只能使用 x 进行交换,如果
当你需要它来交换不同的变量时(或者
类上另一个方法的参数)然后你必须移动
值到 x 中,这是低效的并且
转到 5
。使用您必须提供的值来调用交换函数,而不需要知道您必须先设置一个特殊的 x 变量,这不是更好吗? - 容易出错。当另一个方法被调用时,第二个方法会被调用吗? 是否使用交换方法? x 之后的值应该是多少 叫?您将介绍大量有关交换的上下文并了解交换何时发生 可以调用swap,什么可以调用swap。这很糟糕,任何代码片段越独立,就越不需要担心它以及它的使用方式。
- 没有其他类可以重用您的交换方法,每个需要交换方法的类 交换方法必须实现它自己的,这是一个巨大的 不-不的原因比我在这里数得更多,但可以总结为 违反DRY Principal
所有这些问题都可以通过简单地通过引用传递值来解决。真的很简单:)
希望这有帮助。
关于c++ - 通过引用传递参数与使用实例变量,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7445660/