使用全局变量或几个参数?

时间:2017-09-04 20:51:49

标签: c++

最好使用全局变量,例如:

int bumNum;
int extraNum;
bool isIt;

void setup()
{
    std::cin >> bumNum;
    std::cin >> extraNum;
    isIt= false;
}

void anotherFunc()
{
    //do something with the global variables
}

int main()
{
    setup();
    anotherFunc();
    return 0;
}

或局部变量,例如:

void setup(int& bumNum, int& extraNum, bool& isIt)
{
    std::cin >> bumNum;
    std::cin >> extraNum;
    isIt= false;
}

void anotherFunc(int& bumNum, int& extraNum, bool& isIt)
{
    //do something with the global variables
}

int main()
{
    int bumNum;
    int extraNum;
    bool isIt;
    setup(bumNum, extraNum, isIt);
    anotherFunc();
    return 0;
}

与其他选项相比,第一个选项是输入更少。问题是全局变量并不是真正的朋友:/哦,第二个选项中还有更多的初始化。

2 个答案:

答案 0 :(得分:8)

使用全局变量,您会引入一个全局状态,它本身就存在各种问题:

  • 并发问题(当你添加多线程时,你必须开始考虑用某种互斥体保护那些),

  • 它没有缩放,

  • 随着时间的推移,当你增加这些变量的数量时,对于哪些函数使用哪些变量会变得越来越混乱,

仅举几例。

要回答您的问题 - 尽可能使用全局状态下的参数。

答案 1 :(得分:0)

使用结构:

struct Foo
{
    int bumNum = 0;
    int extraNum = 0;
    bool isIt = false;
};

std::istream& operator >> (std::istream& is, Foo& foo)
{
    std::cin >> foo.bumNum;
    std::cin >> foo.extraNum;
    foo.isIt= false;
    return is;
}

void anotherFunc(Foo& foo)
{
    //do something with the global variables
}

int main()
{
    Foo foo;    
    std::cin >> foo;
    anotherFunc(foo);
}