非成员 std::固定大小数组的空重载的返回值

Return value of non-member std::empty overload for fixed-size arrays

本文关键字:数组 返回值 小数 重载 成员 std      更新时间:2023-10-16

[接受的]标准论文N4280增加了几个新的非成员函数,以折叠到C++17中。

有一些注释指示每个新的非成员函数的正确返回值,特别是固定大小数组的std::empty重载让我感到困惑。该论文建议该重载的返回值将始终false;所有固定大小的数组永远不会为空。

为什么会这样呢?据我所知,有可能(尽管可能无用)有一个零大小的数组,如 int x[0]; ,我称之为空。

作为参考,我所说的特定重载是:

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

它将始终返回 false,因为数组不能声明为包含零元素。 从 C++11 标准(我没有更新的标准,我预计无论如何都不会改变):

在声明T D中,D具有以下形式

     D1 [ 常量表达式 opt ] 属性说明符-seqopt

。如果常表达式存在,则它应为整数常量表达式,其值应大于零。- §8.3.4 [dcl.array]

因此,此重载在符合要求的实现中将始终返回 true。