在静态初始化期间运行代码
Posted
技术标签:
【中文标题】在静态初始化期间运行代码【英文标题】:Running code during static initialization 【发布时间】:2019-11-18 07:54:26 【问题描述】:在我的程序中,我有以下代码:
struct C
static bool Register();
// other methods
private:
// instance data
;
bool Register()
// perform registration
return true;
// - - - -
static bool const registered = C::Register();
这可行,但 cppcheck 抱怨,因为它发现 registered
在写入后从未被读取。
有没有办法为返回void
的函数实现相同的效果(在静态初始化期间调用函数)?
【问题讨论】:
一种解决方法是读取此值,例如如果失败则记录错误。 【参考方案1】:struct C
static bool Register();
// other mnethods
private:
// instance data
;
void Register()
// perform registration
class Registrator
public:
Registrator() Register();
;
static Registrator registrator;
【讨论】:
struct C
这里的目的是什么?你的意思是bool C::Register() ...
?
是的,我刚从 OP 复制过来【参考方案2】:
我不理解你的类的设计...为什么有一个注册类调用外部Register()
函数...为什么不类似
// C can be a singleton
struct C
C() Register();
static bool Register();
// other mnethods
private:
// instance data
;
static C registrator;
如果 C 是单通,可能是这样的:
// C can be a singleton
struct C
C& instance() static C inst; return inst;
// other mnethods
private:
C() Register();
bool Register();
private:
// instance data
;
static C& registration = C::instance();
【讨论】:
以上是关于在静态初始化期间运行代码的主要内容,如果未能解决你的问题,请参考以下文章