는 C++ 컴파일러 (11)에 의해 완벽하게 허용 다음 코드 조각 고려 : 표준 § 따르면C++ 11에서 크기가 0 인 std :: array에 대한 이유가 있습니까?
#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
크기가 0 인 어레이의 경우front()
또는back()
을 호출하는 것과 관련한 정의가 없습니다.
4
구성원 기능swap()
은noexcept(true)
과 동일한 noexcept-specification을 가져야합니다. 상기 표시된
은 제로, std::array
들 예 (int A[0];
예)들이 명시 적으로 금지되고, 또 그들이 일부 컴파일러 허용 제로 크기 어레이 (과는 대조적으로, C++ 11 완벽하게 허용 가능하다 크기 GCC)에서 정의되지 않은 동작의 비용.
이 "모순", 나는 다음과 같은 질문이 고려 :는 C++위원회 허용하기로 결정 왜
- 가 0
std::array
들 크기를? 귀중한 용도가 있습니까?
아마 용기와 일치하고 좀 더 일반적인 것들을 쉽게 만들 수 있습니다. – chris
어떤 크기의 배열에도 어려움이있는 구현이라 할지라도'std :: array'에 부분적으로 특화되어 있어도 별 어려움이 없을 것입니다. –
hvd
템플릿 메타 - 프로그램은 종종 재귀 적이기 때문에, 1보다 1에서 재귀가 바닥 나는 것이 가장 간단한 경우가 많습니다. 그러나이 경우 현실적인 예제를 구성하는 데 어려움을 겪고 있습니다. – Nemo