微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

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

如何解决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 举报,一经查实,本站将立刻删除。