C++11 コンパイラで完全に受け入れられる次のコードを考えてみましょう。
#include <array>
#include <iostream>
auto main() -> int {
std::array<double, 0> A;
for(auto i : A) std::cout << i << std::endl;
return 0;
}
標準 § 23.3.2.8 [サイズがゼロの配列] によると:
1配列は、特殊なケースのサポートを提供する必要がありN == 0ます。
2その場合N == 0、begin() == end() ==一意の値。の戻り値
data()は指定されていません。
3サイズがゼロの配列に対するfront()orの呼び出しの影響は定義されていません。back()
4メンバー関数swap()には、と同等の noexcept-specification が必要noexcept(true)です。
std::array上に示したように、 C++11 ではサイズ 0 のs が完全に許容されますint A[0];。これは、明示的に禁止されているサイズ 0 の配列 (たとえば、 .
この「矛盾」を考慮して、次の質問があります。
C++ 委員会がサイズ 0 の
std::arrays を許可することを決定したのはなぜですか?価値のある用途はありますか?