对于在其类声明之外的静态成员初始化,是不是有必要提供其类型?
Posted
技术标签:
【中文标题】对于在其类声明之外的静态成员初始化,是不是有必要提供其类型?【英文标题】:for a static member initialization outside its class declaration, is it necessary to provide its type?对于在其类声明之外的静态成员初始化,是否有必要提供其类型? 【发布时间】:2020-09-02 05:10:36 【问题描述】:我有一门课
游戏.h:
class Game
public:
~Game ()
bool init(const char* title,int xpos, int ypos, int width, int height,bool fullscreen );
void render();
void update() ;
void handleEvents();
void clean();
void draw();
static Game* Instance();
// a function to acces the private running variable
bool running () return m_bRunning;
private:
Game ();
static Game* s_pInstance;
SDL_Window* m_pWindow;
SDL_Renderer* m_pRenderer;
bool m_bRunning;
int m_currentFrame;
;
//create the typedef
typedef Game TheGame;
在 Game.cpp 中,我有一个静态变量初始化,如下所示
Game* Game::s_pInstance = 0;
所以我想知道为什么我需要在这里使用 (Game*
) 变量类型,这是必须的吗?
【问题讨论】:
是的。也不需要 typedef - 它没有任何作用。 无关:您可能会发现Meyers Singleton 更方便(并且从 C++ 11 开始更安全) 【参考方案1】:我有一个静态变量初始化,如下所示
Game* Game::s_pInstance = 0;
此描述不完整。更准确地说:您有一个静态变量定义,并且初始化是该定义的一部分。初始化不需要提及类型,但定义需要。从语法上讲,您可以省略初始化部分(删除= 0
),但您仍然需要定义才能使用该变量。 警告:不要真正放弃初始化,除非作为实验来查看它是否可以编译。
定义需要包含被定义事物的类型。这就是语言的工作方式。在更专业的层面上,类型的存在可能有助于将行识别为定义而不是表达式。
【讨论】:
所以你是说我不需要显式使用 Game* 进行初始化部分,但添加它是一个好习惯,因为它使代码更易于理解 @rudrasarkar 不,你误会了。此处需要Game*
。 Game*
是定义的一部分,初始化是= 0
。
@rudrasarkar 除了回答你的问题,JaMiT 还在纠正你的术语。如前所述,您所拥有的基本上是一个定义,而定义需要一个类型。以上是关于对于在其类声明之外的静态成员初始化,是不是有必要提供其类型?的主要内容,如果未能解决你的问题,请参考以下文章