C++ 中全局变量的替代方案

Alternatives To Global Variables in C++

我需要在主函数中设置一个变量并从同一文件中的不同函数访问它。我不能将它传递给函数,因为这意味着更改整个代码结构,这不是一个选项。为了避免声明一个全局变量,我创建了一个命名空间,我想检查这是否是一个好的编程习惯,或者是否有更简洁的方法来做到这一点。 这是代码:

namespace mylocalnamespace{
    int myglobalvar;
}

static void myFunc()
{
    ..... some code
    operationX(mylocalnamespace::myglobalvar);
    ..... some code

}
int main(int argc, char **argv)
{
   ..... some code
   mylocalnamespace::myglobalvar = atoi(argv[0]);
   ..... some code
}

Alternatives To Global Variables in C++

在这个例子中,函数参数是避免全局变量的一个很好的选择:

static void myFunc(int mylocalvar)
{
    ..... some code
    operationX(mylocalvar);
    ..... some code

}
int main(int argc, char **argv)
{
   ..... some code
   mylocalvar = atoi(argv[0]);
   ..... some code
   myFunc(mylocalvar);
}

I can not pass it to the function

哦,那你得用全局变量了

由于您显然是在具有内部链接的函数中使用它,因此您也可以通过使用具有内部链接的全局来略微改进。这样全局就不会泄漏到其他翻译单元。实现这一点的一种简便方法是匿名命名空间:

namespace {
    int myglobalvar;

    void myFunc() {
        // ...

To avoid declaring a global variable I crated a namespace

即使不在全局命名空间中,全局变量仍然是全局变量。