What is the rationale for not having static constructor in C++?

后端 未结 5 1547
长情又很酷
长情又很酷 2020-12-24 12:38

What is the rationale for not having static constructor in C++?

If it were allowed, we would be initializing all the static members in it, at one place in a very org

5条回答
  •  被撕碎了的回忆
    2020-12-24 12:52

    In which translation unit would the static objects be placed?

    Once you account for the fact that statics have to be placed in one (and only one) TU, it's then not "very difficult" to go the rest of the way, and assign values to them in a function:

    // .h
    class sample
    {
    public:
        static int some_integer;
        static std::vector strings;
    };
    
    //.cpp
    
    // we'd need this anyway
    int sample::some_integer;
    std::vector sample::strings;
    
    // add this for complex setup
    struct sample_init {
        sample_init() {
           sample::some_integer = 100;
           sample::strings.push_back("stack");
           sample::strings.push_back("overflow");
        }
    } x;
    

    If you really want the code for sample_init to appear in the definition of class sample, then you could even put it there as a nested class. You just have to define the instance of it in the same place you define the statics (and after they've been initialized via their default constructors, otherwise of course you can't push_back anything).

    C# was invented 15-20 years after C++ and has a completely different build model. It's not all that surprising that it offers different features, and that some things are less simple in C++ than in C#.

    C++0x adds a features to make it easier to initialize vectors with some data, called "initializer lists"

提交回复
热议问题