C++11 では、次のような0
長さの C 配列を作成できます。std:array
int arr1[0];
std::array arr2<int,0>;
- だから、保存するスペースがない配列の用途は何だと思いますか?
- 第二に、長さゼロの配列とは何ですか? ポインターの場合、どこを指していますか?
あなたの最初の例は標準の 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() を呼び出した場合の効果は未定義です。