为何(非常量)全局变量是洪水猛兽

倘若向一位资深程序员请教一条关于良好编程实践的建议,对方十有八九会回答:“避免使用全局变量!"——理由充分:全局变量是该语言历史上最常被滥用的概念之一。尽管在小型示例程序里它们看似无害,但在大型代码库中却常常带来严重问题。

新手往往偏爱大量全局变量,因为它们易于使用,尤其在需要多次调用不同函数时(通过形参传递数据确实繁琐)。然而,这通常是一个糟糕的决定。许多开发者主张彻底避免非常量全局变量

在深入原因之前,必须先澄清:当开发者说"全局变量是邪恶的"时,他们通常指的并非所有全局变量,而是非常量全局变量

一、为何非常量全局变量危险

最根本的原因是:其值可被任何被调函数修改,而程序员难以预知这一变化。示例:

#include <iostream>

int g_mode; // 声明全局变量(默认零初始化)

void doSomething()
{
    g_mode = 2; // 将全局 g_mode 设为 2
}

int main()
{
    g_mode = 1; // 注意:这是对全局 g_mode 赋值,而非声明局部变量!

    doSomething();

    // 程序员仍期望 g_mode 为 1
    // 但 doSomething 已将其改为 2!

    if (g_mode == 1)
        std::cout << "No threat detected.\n";
    else
        std::cout << "Launching nuclear missiles...\n";

    return 0;
}

关注公众号,回复"cpp-tutorial"

可领取价值199元的C++学习资料

公众号二维码

扫描上方二维码或搜索"cpp-tutorial"