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

时间:2014-12-24 06:55:25

标签: c++ arrays c++17

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

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

为什么会出现这种情况?据我所知,有可能(尽管可能没用)拥有零大小的数组,如int x[0];,我称之为空。

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

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

1 个答案:

答案 0 :(得分:4)

它总是返回false,因为数组不能声明为包含零元素。从C ++ 11标准(我没有更新的标准,我不希望这会改变):

  

在声明T DD的格式为

     

D1 [ 常量表达式 opt ] attribute-specifier-seq opt

     

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

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