问题描述
所以我试图为未来的开发设置一种简单的方法来定义日志消息。 我想到了 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 (将#修改为@)