1

[承認された] 標準文書N4280は、C++17 に折りたたまれるいくつかの新しい非メンバー関数を追加します。

新しい非メンバー関数のそれぞれの適切な戻り値を示すコメントがあり、特に、std::empty固定サイズの配列のオーバーロードは私を混乱させます。falseこの論文は、そのオーバーロードの戻り値が常に;になることを示唆しています。すべての固定サイズの配列が空になることはありません。

なぜこれが当てはまるのでしょうか?私の知る限りでは、(おそらく役に立たないかもしれませんが) のようにサイズがゼロの配列を持つことは可能ですint x[0];。これを空と呼びます。

参考までに、私が話している特定のオーバーロードは次のとおりです。

template <class T, size_t N> constexpr bool empty(const T (&array)[N]) noexcept;
4

1 に答える 1

4

配列はゼロ要素を含むと宣言できないため、常に false を返します。C++ 11標準から(私はより最近の標準を手元に持っておらず、とにかくこれが変更されるとは思わない):

フォームを持つ宣言T DD

    D1 [ 定数式opt ] 属性指定子 seq opt

...定数式が存在する場合、それは整数定数式であり、その値は 0 より大きくなければなりません。- §8.3.4 [dcl.array]

したがって、このオーバーロードは、適合する実装では常に true を返します。

于 2014-12-24T07:14:57.337 に答える