【问题标题】:c++ why are my statements in if loop not executingc ++为什么我在if循环中的语句没有执行
【发布时间】:2021-10-18 14:26:23
【问题描述】:

我有一个函数可以检查 a 是否大于 b。我的输出是“ok”,这意味着 if 语句是真的,但我不明白为什么它不交换 a 和 b。 (p是函数中的另一个变量)

    if (a > b)
    {
        cout << "ok " << endl;
        swap(a, b);
        _bubbleUp(p);
    }
    else
        cout << "no " << endl;

我的交换功能

void swap(T a, T b)
{
    T temp = a;
    a = b;
    b = temp;
}

【问题讨论】:

    标签: c++ function swap


    【解决方案1】:

    您的交换函数通过获取ab,因此它不会改变传递的变量。

    为了使更改传播,您需要通过引用获取参数:

    void swap(T& a, T& b)
    {
      // ...
    

    或者更好:只需使用std::swap()

    【讨论】:

    • 虽然我在 C++ 中使用了内置的交换函数,但还是一样。打印了“ok”,但它没有进入交换功能。
    • @dumbodumbo “但它不会进入交换功能。”你在这里做了一个很大的假设。 “调用函数没有效果”也是一种可能性。您需要向我们展示完整的MCVE
    【解决方案2】:

    这一行:void swap(T a, T b)

    当编译器看到这一点时,它实际上创建了 a 和 b 的副本,它并没有改变 a 和 b 的实际值。也就是传值

    您必须通过引用传递:void swap(T&amp; a, T&amp; b) 或使用标准的std::swap()

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-07-07
      • 1970-01-01
      • 2021-12-24
      相关资源
      最近更新 更多