确定是否在未设置全局变量的情况下调用函数

时间:2017-09-07 09:54:29

标签: c++ c++11

在没有设置全局变量的情况下确定是否在C ++中调用函数有什么好方法?

#include <iostream>

bool var = false;

void X ()
{
    if (var) {std::cout<<" Y called "<< std::endl;}
}

void Y ()
{var = true;}

int main()
{
Y();
X();
}

我真的想要一个在不设置全局变量的情况下执行此操作的示例。

2 个答案:

答案 0 :(得分:2)

如果YX以这种方式相关,那么您可以将它们移到class

struct Foo
{
    void X()
    {
         if (var) {std::cout<<" Y called "<< std::endl;}
    }
    void Y()
    {
        var = true;
    }
    Foo() : var(false) /*this is the constructor*/
    {
    }
private:
    bool var;      
};

如果您不想打扰static实例,您甚至可以成为会员Foo

还要注意使用构造函数。也许你可以将你的初始化内容放在那里;那么你就不需要在X中检查初始化状态。

答案 1 :(得分:0)

通常的方法是使用静态局部变量:

void X() {
    static bool done = false;
    // whatever
    done = true;
}

静态变量在函数第一次运行时初始化。在后续调用中,它具有上次分配给它的任何值。