const 全局对象的构造函数体执行?

问题描述

所以我试图为未来的开发设置一种简单的方法来定义日志消息。 我想到了 Header 内的以下对象初始化(作为全局变量“SYstem_START”;而不是在函数内!):

const LogMessage SYstem_STARTED(0x0001,DEBUG,"System started");

需要来自不同标头的其他声明(仅用于此处的示例):

enum LogSeverity_E : uint8_t
{
    INFO = 0x01,DEBUG = 0x02
};

class LogMessage
{
  public:

    LogMessage( uint16_t messageId,LogSeverity_E severityId,const char* text = nullptr );

    const char* getText() const;
  private:

    uint16_t        messageId_;
    LogSeverity_E   severityId_;
    const char*     text_;
};

及其在 cpp 中的定义:

LogMessage::LogMessage(uint16_t messageId,ConstCharPtr text) :
messageId_ { messageId },severityId_ {severityId},text_ { text }
{
    /* if I call a function here,e.g. a Singleton-function-call. What will happen if the object is initialized as a local/global variable like at the top? */
};

const char* LogMessage::getText() const
{
    return text_;
};

我不是在 PC 上工作,而是在带有特殊编译器的嵌入式硬件上工作。我在这里看到的是,它甚至在跳转到 main 之前调用了这个构造函数,因此它也在那里调用一个单例。

我在 cppreference 或其他地方都找不到此行为的任何定义,因为常量对象的构造函数体到处都是空的。

正如构造函数中的注释所述:如果我在这个特定示例中使用 const 对象作为全局变量调用一个函数会发生什么?我在此处发生的解释行为是否属于合法行为?甚至像这样使用这段代码是一种合法行为吗?还是我的编译器和嵌入式硬件很幸运?

解决方法

暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!

如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。

小编邮箱:dio#foxmail.com (将#修改为@)