13

C++11 では、次のような0長さの C 配列を作成できます。std:array

int arr1[0];
std::array arr2<int,0>;
  1. だから、保存するスペースがない配列の用途は何だと思いますか?
  2. 第二に、長さゼロの配列とは何ですか? ポインターの場合、どこを指していますか?
4

1 に答える 1

21

あなたの最初の例は標準の C++ ではありませんが柔軟gcc配列clangのバージョンであり、この質問に対する答えです: 柔軟な配列メンバーは本当に必要ですか? では、この機能の多くの利点について説明します。-pedanticフラグを使用してコンパイルした場合、次の警告が で表示されます。gcc

警告: ISO C++ はゼロ サイズの配列 'arr1' を禁止します [-Wpedantic]

および の次の警告clang:

警告: ゼロ サイズの配列は拡張です [-Wzero-length-array]

2番目のケースについては、長さゼロにより、ゼロ長のstd::array特別なケースを必要とせずに、より単純な汎用アルゴリズムが可能になります。たとえば、タイプsize_tのテンプレートの非タイプパラメータです。std::arrayのcppreference セクションにあるように、これは特殊なケースです。

長さゼロの配列 (N == 0) には特殊なケースがあります。その場合、array.begin() == array.end() であり、これは一意の値です。サイズがゼロの配列で front() または back() を呼び出した場合の効果は未定義です。

また、空になる可能性のある他のシーケンスコンテナとの一貫性も保ちます。

于 2014-10-06T02:50:40.607 に答える