C++ 全局变量的命名空间

C++ 全局变量的命名空间,c++,namespaces,sdl,global,sdl-2,C++,Namespaces,Sdl,Global,Sdl 2,我希望所有应用程序都可以访问变量。这是坏习惯吗?若然,原因为何 namespace Global { SDL_Window* window; SDL_Renderer* renderer; UI* new_view; } 另一个建议: 将指向全局变量的指针传递给构造函数中的类,并将其保持为局部变量,怎么样 class A { SDL_Renderer* m_renderer; A(SDL_Renderer* renderer); } A::A(SD

我希望所有应用程序都可以访问变量。这是坏习惯吗?若然,原因为何

namespace Global
{
    SDL_Window* window;
    SDL_Renderer* renderer;
    UI* new_view;
}
另一个建议:

将指向全局变量的指针传递给构造函数中的类,并将其保持为局部变量,怎么样

class A
{
    SDL_Renderer* m_renderer;

    A(SDL_Renderer* renderer);
} 

A::A(SDL_Renderer* renderer)
{
    m_renderer = renderer;
}
这是坏习惯吗

是的,使用全局变量是不好的做法,不管这些变量是否放在单独的名称空间中

若然,原因为何

namespace Global
{
    SDL_Window* window;
    SDL_Renderer* renderer;
    UI* new_view;
}
它在系统模块之间引入了不必要的依赖关系。将数据和行为本地化到负责执行特定操作的类。
在少数情况下,单例是有意义的,但这些单例不应该是简单的全局变量,而是有一个静态成员(或自由)函数来访问它们。

是的,这很糟糕。
好的方面:您解决了第一个不好的原因(使全局名称空间混乱),
但是不要把你自己的名字命名为“全球”。选择更独特的东西。
不好的地方:还有更多的事情,比如创建不需要的依赖项

(就像程序A部分如果B部分不修改值就无法工作)

为什么不显式地将变量传递给函数或使用这些变量的任何类?这就是我到目前为止所做的,但它会导致函数具有9+个参数。我在问题中添加了另一个建议。如果你总是通过所有三个,那么你可以定义一个
struct
,其中包括三个成员,并且只通过一个struct。好主意,我会试试that@user3720733:如果您不总是将它们一起传递……那么,使用9个参数并没有什么坏处:P