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