为什么(非 const)全局变量在 C++ 中是邪恶的

2024 年 8 月 29 日 | 4 分钟阅读

在本文中,您将了解为什么 C++ 中的全局变量是邪恶的

在任何程序函数之外,全局变量被定义和声明。在程序运行期间,它们维护其理想。在整个程序执行过程中,它们都是可用的。

**非 const** 的全局变量是邪恶的,因为任何函数都可以修改它们的值。当使用全局变量时,程序变得不那么灵活和模块化。建议不要在程序中使用全局变量。请在程序中使用局部变量而不是全局变量。

  1. 意外的副作用:由于全局变量在程序的任何地方都可以访问和编辑,因此跟踪导致意外副作用的更改可能具有挑战性。代码可能因此变得更难理解和更新。
  2. 命名空间污染:过度使用全局变量可能导致命名空间污染,即变量名在全局命名空间中堆积,可能导致命名冲突。全局变量是全局命名空间的一部分。
  3. 对初始化顺序的依赖:全局变量可能受初始化顺序的影响。如果控制不好,可能导致意外行为。这可能成为一个重要的错误来源,特别是在包含多个翻译单元的复杂程序中。
  4. 难以测试和调试:使用全局变量的程序可能更难以测试和调试,因为代码的任何部分都可能更改变量的状态,从而难以识别和复制单个问题。
  5. 封装和抽象:面向对象编程的基本概念包括封装和抽象,即数据的隐藏。使用全局变量可能会破坏封装,因为程序的任何部分都可以访问和更改全局状态,从而使数据安全和完整性管理变得困难。

局部变量或将变量显式作为函数参数传递通常被建议作为减少全局变量使用并帮助缓解这些问题的方法。将数据封装在类中并使用适当的访问修饰符(例如 private 和 protected)进一步有助于减少对全局变量的依赖并改进数据管理。在适当的情况下,使用 const 全局变量还可以避免预期的更改并强制执行不变性。

示例

输出

Initial value of the global variable: 5
Global variable value: 10
New local variable value: 20
Global variable value: 10

说明

  1. #include <iostream>: 您可以通过包含输入/输出流库来使用 std::cout 将输出打印到控制台。
  2. int globalVariable = 5;: 此行将全局整数变量 globalVariable 初始化为值 5。程序中的任何函数都可以访问和修改全局变量,这些变量在所有其他函数之外定义。
  3. void modify_Global_Variable(): 此行定义了 modify_Global_Variable() 方法,该方法没有参数并返回 void。全局变量 globalVariable 在此方法内部更新为数字 10。
  4. void print_Global_Variable(): 此行定义了函数 print_Global_Variable()。它没有参数并返回 void。此函数只是将全局变量 globalVariable 的值打印到控制台。
  5. 在 main() 函数中
    • std::cout << "全局变量的初始值: " << globalVariable << std::endl; 将全局变量的初始值 5 打印到控制台。alter_Global_Variable(); 调用 alter_Global_Variable() 方法,将全局变量的值设置为 10。
    • print Global Variable(); 现在通过调用 print Global Variable() 方法打印全局变量的修改值。
    • main() 函数中,声明了一个名为 globalVariable 的新局部变量,其值为 20。此局部变量对同名的全局变量没有任何影响,并且只能在 main() 方法中访问。
    • std::endl; \< globalVariable \\ std::cout \\ "新的局部变量值: " 打印局部全局变量的值,即 20。