【问题标题】:C++ function does not update variableC++ 函数不更新变量
【发布时间】:2021-09-22 21:04:31
【问题描述】:

我目前正在编写一个函数,该函数必须更新布尔值。
但出于某种原因,它并没有这样做。让我给你看一个简化的版本:

ma​​in.cpp

#include <iostream>
#include "header.h" 


int main(){

bool limit = true;

test(limit);

if (limit == false){cout << "hi";}

}

header.h

void test(bool x);

header.cpp

#include <iostream>
#include "header.h"

void test(bool x){

x = false;
}

我在主函数中定义了布尔“限制”。然后我将它传递给位于 header.cpp 中的函数“test”。在此函数中,布尔限制设置为 false。 但是,返回到 main.cpp,布尔值仍然是正确的。我看到了,因为没有调用 if 条件。 我怀疑该错误与文件之间传递的信息有关。 你知道真正的原因和可能的替代方案吗?

【问题讨论】:

标签: c++ function linker header boolean


【解决方案1】:

当你将函数test声明为

void test(bool x);

参数bool x是按值传递的。也就是说,计算机会复制您传递给test 的变量。因此,当测试更新此类变量时,您只是修改了一个临时变量,不会影响您从 main 传递给它的 bool 限制。

如果您打算更新x,则应传递reference 并将test 声明为

void test(bool& x);

【讨论】:

    【解决方案2】:

    test 中,x 是传入其中的值的副本。改为使用参考:

    void test(bool &x)
    {
        x=false;
    }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2020-09-09
      • 1970-01-01
      • 1970-01-01
      • 2023-04-10
      • 2023-02-09
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多