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 を許可することを決定したのはなぜですか?
- 価値のある用途はありますか?