首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >什么是C++成语相当于Java静态块?

什么是C++成语相当于Java静态块?
EN

Stack Overflow用户
提问于 2018-03-26 01:32:29
回答 2查看 0关注 0票数 0

我有一个静态成员的类,我想运行一些代码来初始化它们(假设这个代码不能转换成一个简单的表达式)。在Java中,我只会这样做

代码语言:javascript
复制
class MyClass {
    static int myDatum;

    static {
        /* do some computation which sets myDatum */
    }
}

除非我错了,否则C ++不允许使用这种静态代码块,对吧?我应该做些什么呢?

我想为以下两个选项解决方案:

  1. 初始化发生在进程加载时(或加载此类的DLL时)。
  2. 初始化发生在类首次实例化时。

对于第二种选择,我想到:

代码语言:javascript
复制
class StaticInitialized {
    static bool staticsInitialized = false;

    virtual void initializeStatics();

    StaticInitialized() {
        if (!staticsInitialized) {
            initializeStatics();
            staticsInitialized = true;
        }
    }
};

class MyClass : private StaticInitialized {
    static int myDatum;

    void initializeStatics() {
        /* computation which sets myDatum */
    }
};

但这是不可能的,因为C ++(目前?)不允许初始化非常量静态成员。但是,至少可以通过表达式将静态块的问题减少到静态初始化的问题......

EN

Stack Overflow用户

发布于 2018-03-26 11:03:50

可以用C ++初始化静态数据成员:

代码语言:javascript
复制
#include "Bar.h"

Bar make_a_bar();

struct Foo
{
    static Bar bar;
};

Bar Foo::bar = make_a_bar();

你可能不得不考虑翻译单元之间的依赖关系,但这是一般的方法。

票数 0
EN
查看全部 2 条回答
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/-100004303

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档