全局变量

尽量不要使用全局变量

  • 尽量避免使用全局变量:优先考虑使用局部变量、参数或类的成员变量。
  • 禁止class类型的全局变量:避免使用全局类实例,因为它们可能导致资源管理和生命周期问题。
  • 多线程代码中禁止非常数全局变量:在多线程环境中,非常数全局变量可能导致数据竞争和一致性问题。
  • 禁止使用函数返回值初始化全局变量:函数返回值的不确定性可能导致全局变量的初始化状态不可预测。

不推荐示例

class GlobalClass {
    // ...
};

GlobalClass globalInstance; // class类型的全局变量

int globalValue = someFunction(); // 使用函数返回值初始化全局变量

int someFunction() {
    return getRandomNumber(); // 函数返回值
}
  • GlobalClass globalInstance; 可能会导致资源管理和生命周期问题。
  • int globalValue = someFunction(); 可能会导致全局变量的初始化状态不可预测,特别是在多线程环境中。

推荐示例

class LocalClass {
public:
    static const int constantValue; // 常量全局变量
};

const int LocalClass::constantValue = 42; // 常量全局变量的初始化

void function() {
    int localValue = someFunction(); // 局部变量
    // 使用localValue
}

int someFunction() {
    return getRandomNumber(); // 函数返回值
}
  • 使用局部变量代替全局变量,减少了全局状态的依赖。
  • 常量全局变量是安全的,因为它们在程序执行期间不会改变。
  • 通过避免使用函数返回值初始化全局变量,确保了全局变量的初始化是明确和可控的。