在静态初始化期间运行代码

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();

【讨论】:

以上是关于在静态初始化期间运行代码的主要内容,如果未能解决你的问题,请参考以下文章

量的内存单元是编译器在编译时候分配的

static的使用总结

Kotlin CI 测试期间的静态最终变量初始化(Java 中)不正确

初始化期间程序未与 Array 一起运行

课堂笔记0518 static final

C++面试题目汇总