问题
In C++11 it allows you to create a 0
length C array and std:array
like this:
int arr1[0];
std::array arr2<int,0>;
- So I\'m thinking what is the use of a array that doesn\'t have a space to store?
- Secondly what is the zero length array? If it is a pointer, where does it pointing to?
回答1:
Your first example is not standard C++ but is an extension that both gcc
and clang
allow, it is version of flexible arrays and this answer to the question: Are flexible array members really necessary? explains the many advantages of this feature. If you compiled using the -pedantic flag you would have received the following warning in gcc
:
warning: ISO C++ forbids zero-size array 'arr1' [-Wpedantic]
and the following warning in clang
:
warning: zero size arrays are an extension [-Wzero-length-array]
As for your second case zero-length std::array
allows for simpler generic algorithms without having to special case for zero-length, for example a template non-type parameter of type size_t. As the cppreference section for std::array notes this is a special case:
There is a special case for a zero-length array (N == 0). In that case, array.begin() == array.end(), which is some unique value. The effect of calling front() or back() on a zero-sized array is undefined.
It would also make it consistent with other sequence containers which can also be empty.
来源:https://stackoverflow.com/questions/26209190/what-is-the-use-of-0-length-array-or-stdarray