c++ - 通过引用传递参数与使用实例变量

标签 c++ reference instance-variables

我开始阅读一本关于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 不是可以在类中的任何地方直接访问吗? (根本不需要指定参数)?预先感谢您的回答!

最佳答案

出于多种原因。

  1. 您应该在最窄的位置声明变量 scope可能的。为什么?看2和3
  2. 变量很昂贵,它们占用内存,你只需要它们 只要您需要它们。
  3. 变量 scope 越大(即变量可见的代码量 到)您错误使用的可能性就越大 变量,因此它的值可能会意外改变。这将是一个错误,祝你好运,找到那个错误。
  4. Tight coupling (这不好)。如果你编写一个类并在其上放置一个交换方法 类,并且您编写它,以便它使用实例成员 x (而不是方法 变量 x),那么该交换方法只能使用 x 进行交换,如果 当你需要它来交换不同的变量时(或者 类上另一个方法的参数)然后你必须移动 值到 x 中,这是低效的并且转到 5。使用您必须提供的值来调用交换函数,而不需要知道您必须先设置一个特殊的 x 变量,这不是更好吗?
  5. 容易出错。当另一个方法被调用时,第二个方法会被调用吗? 是否使用交换方法? x 之后的值应该是多少 叫?您将介绍大量有关交换的上下文并了解交换何时发生 可以调用swap,什么可以调用swap。这很糟糕,任何代码片段越独立,就越不需要担心它以及它的使用方式。
  6. 没有其他类可以重用您的交换方法,每个需要交换方法的类 交换方法必须实现它自己的,这是一个巨大的 不-不的原因比我在这里数得更多,但可以总结为 违反DRY Principal

所有这些问题都可以通过简单地通过引用传递值来解决。真的很简单:)

希望这有帮助。

关于c++ - 通过引用传递参数与使用实例变量,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7445660/

相关文章:

c++ - "[ this ]"在 C++ 中是什么意思

arrays - Perl - 将变量分配给引用的值

c# - 条件引用

python - 动态更改代表类对象的实例变量 - Python

objective-c - 无法访问 C 函数体中的 Objective-C 类实例变量

SwiftUI 如何从另一个类访问 ContentView 变量

c++ - 空间 vector 、颜色 vector

c++ - Qt 5.5 和 Qt Installer Framework 2.0.1 : Logo is not displayed despite being present in config. xml

使用 mxArray 的 C++ 动态内存分配

reference - 什么允许在调用方法时从结构隐式转换为其引用?