C++ array initialization

前端 未结 4 1943
Happy的楠姐
Happy的楠姐 2020-12-02 06:26

is this form of intializing an array to all 0s

char myarray[ARRAY_SIZE] = {0} supported by all compilers? ,

if so, is there similar syntax

4条回答
  •  生来不讨喜
    2020-12-02 06:41

    Yes, this form of initialization is supported by all C++ compilers. It is a part of C++ language. In fact, it is an idiom that came to C++ from C language. In C language = { 0 } is an idiomatic universal zero-initializer. This is also almost the case in C++.

    Since this initalizer is universal, for bool array you don't really need a different "syntax". 0 works as an initializer for bool type as well, so

    bool myBoolArray[ARRAY_SIZE] = { 0 };
    

    is guaranteed to initialize the entire array with false. As well as

    char* myPtrArray[ARRAY_SIZE] = { 0 };
    

    in guaranteed to initialize the whole array with null-pointers of type char *.

    If you believe it improves readability, you can certainly use

    bool myBoolArray[ARRAY_SIZE] = { false };
    char* myPtrArray[ARRAY_SIZE] = { nullptr };
    

    but the point is that = { 0 } variant gives you exactly the same result.

    However, in C++ = { 0 } might not work for all types, like enum types, for example, which cannot be initialized with integral 0. But C++ supports the shorter form

    T myArray[ARRAY_SIZE] = {};
    

    i.e. just an empty pair of {}. This will default-initialize an array of any type (assuming the elements allow default initialization), which means that for basic (scalar) types the entire array will be properly zero-initialized.

提交回复
热议问题