making a constant array in c++

前端 未结 2 2016
走了就别回头了
走了就别回头了 2020-12-24 05:31

Is there any reason why codeblocks is telling me that I can\'t make an array? I\'m simply trying to do:

const unsigned int ARRAY[10] = {0,1,2,3,4,5,6,7,8,9};         


        
2条回答
  •  生来不讨喜
    2020-12-24 06:37

    You say that you did this within a class, as a private variable.

    Recall that (at the moment), member variables may not be initialised in the same place where you declare them (with a few exceptions).

    struct T {
       std::string str = "lol";
    };
    

    is not ok. It has to be:

    struct T {
       std::string str;
       T() : str("lol") {}
    };
    

    But, to add insult to injury, pre-C++0x you cannot initialise arrays in the ctor-initializer!:

    struct T {
       const unsigned int array[10];
       T() : array({0,1,2,3,4,5,6,7,8,9}) {} // not possible :(
    };
    

    And, because your array's elements are const, you can't rely on assignment either:

    struct T {
       const unsigned int array[10];
       T() {
           for (int i = 0; i < 10; i++)
              array[i] = i; // not possible :(
       }
    };
    

    However, as some other contributors have quite rightly pointed out, there seems little point in having a copy of the array for each instance of T if you can't modify its elements. Instead, you could use a static member.

    So, the following will ultimately solve your problem in what's — probably — the best way:

    struct T {
       static const unsigned int array[10];
    };
    
    const unsigned int T::array[10] = {0,1,2,3,4,5,6,7,8,9};
    

    Hope this helps.

提交回复
热议问题