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

从连续调用中操纵第一次构造函数调用的行为

如何解决从连续调用中操纵第一次构造函数调用的行为

我必须将 C++98 用于我正在开发的应用程序。

我想根据是否第一次调用构造函数来控制构造函数的行为。 对于第一次构造函数调用,我想执行一些额外的代码,但它不能在连续调用中执行。 为此,我决定使用一个认值为 false 的静态 bool,在第一次构造函数调用后,它会在其他所有调用中都设置为 true。

class data_sender {
private:
    static bool library_initialized;
public: // etc.
};

这是保密的,因为我不希望这个类的使用者直接操作它。 它不是 const,因为显然我想在构造函数中更改它。

现在我不能为此分配认值,它说 c++ 禁止这种非常量静态变量初始化。

我认为我的方法在这里错误的,我应该使用其他方法。 我对 C++ 比较陌生,所以即使你给我指出一些文章或告诉我要搜索什么。


我注意到的另一个奇怪的事情是,当我在 .h 文件中将 library_initialized 定义为 false 时,

class data_sender { .... };
bool data_sender::library_initialized = false;

它给了我链接错误

但是如果我在 data_sender.cpp 中定义它,它允许我这样做,并且编译没有错误

data_sender::data_sender() { ... } //constructor deFinition
bool data_sender::library_initialized = false; // This is inside data_sender.cpp

这个应用程序是为 mips 和 ipq 架构而开发的,如果重要的话,将使用 gcc 4.8 (openwrt-mips) 和 gcc 5.2 (openwrt-arm) 编译。


我在 stackoverflow 上找到了一个与我类似的答案,为什么我只需要在实现文件 (.cpp) 中而不是在标题 (.h) 中指定它。

Static constant string (class member)

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。