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 to other types? for example
bool myBoolArray[ARRAY_SIZE] = {false}
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] = {};
ie 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.
请注意,'='在C ++ 11通用初始化语法中是可选的,并且它通常被认为是更好的写入样式:
char myarray[ARRAY_SIZE] {0}
Yes, I believe it should work and it can also be applied to other data types.
For class arrays though, if there are fewer items in the initializer list than elements in the array, the default constructor is used for the remaining elements. If no default constructor is defined for the class, the initializer list must be complete — that is, there must be one initializer for each element in the array.
You can declare the array in C++ in these type of ways. If you know the array size then you should declare the array for: integer: int myArray[array_size];
Double: double myArray[array_size];
Char and string : char myStringArray[array_size];
The difference between char and string is as follows
char myCharArray[6]={'a','b','c','d','e','f'};
char myStringArray[6]="abcdef";
If you don't know the size of array then you should leave the array blank like following.
integer: int myArray[array_size];
Double: double myArray[array_size];
Additionally, keep a note of how the array
and vector
are default initialized if don't initialize them explicitly.
int main()
{
bool arr1[3]; // true true true [here true is SOME garbage value]
std::vector<bool> vec1(3); // false false false
bool arr2[3] = { true }; // true false false [here true/false are REAL true/false values]
vector<bool> vec2(3, true); // true true true
bool arr3[3] = { false }; // false false false
std::vector<bool> vec3(3, false); // false false false
int arr4[3]; // GV GV GV - garbage value
std::vector<int> vec4(3); // 0 0 0
int arr5[3] = { 1 }; // 1 0 0
std::vector<int> vec5(3, 1); // 1 1 1
int arr6[3] = { 0 }; // 0 0 0
std::vector<int> vec6(3, 0); // 0 0 0
}
The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.