简体   繁体   中英

c++ array initialization

float minTime[7]={FLT_MAX};
    for(int i=0;i<7;i++)
        cout << "Min: " << minTime[i] << endl;

Why do I get in the following output :

Min: 3.40282e+038
Min: 0
Min: 0
Min: 0
...

Shoudln't all have the same value as the first one? As it is refered here: C++ Notes

Your linked page says "...the unspecified elements are set to zero."

This is correct; as such, only the first element in your array was specified to be FLT_MAX , the rest are initialized to zero. If you want to set them all to the same value you can use a for-loop, or more succinctly:

std::fill_n(minTime, 7, FLT_MAX);

As a warning, C++ is a hard language. This means lots of people have lots of misinformation, and this is especially easy to find on the internet. You'd be better off learning from a book on our list . (And yes, the ones not on our list are so because they too contain misinformation!)

Shoudln't all have the same value as the first one?

Nopes! When an array is partially initialized the non-initialized array elements are value initialized ( zero-initialized in this case).

C++03 Section 8.5.1/7

If there are fewer initializers in the list than there are members in the aggregate, then each member not explicitly initialized shall be value-initialized (8.5).
[Example:

 struct S { int a; char* b; int c; }; S ss = { 1, "asdf" }; 

initializes ss.a with 1, ss.b with "asdf", and ss.c with the value of an expression of the form int(), that is, 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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM