Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/160.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/arrays/14.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/oop/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 固定大小数组的非成员std::empty重载的返回值_C++_Arrays_C++17 - Fatal编程技术网

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

C++ 固定大小数组的非成员std::empty重载的返回值,c++,arrays,c++17,C++,Arrays,C++17,[accepted]标准文件添加了几个新的非成员函数,以折叠到C++17中 有一些注释指示每个新的非成员函数的正确返回值,特别是固定大小数组的std::empty重载使我感到困惑。本文建议该重载的返回值总是false;所有固定大小的数组永远不会为空 为什么会这样?据我所知,有一个零大小的数组是可能的(尽管可能没有用处),如intx[0],我称之为空 作为参考,我提到的特定过载是: template <class T, size_t N> constexpr bool empty(co

[accepted]标准文件添加了几个新的非成员函数,以折叠到C++17中

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

为什么会这样?据我所知,有一个零大小的数组是可能的(尽管可能没有用处),如
intx[0],我称之为空

作为参考,我提到的特定过载是:

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

它总是返回false,因为数组不能声明为包含零元素。来自C++11标准(我手头没有更新的标准,我也不希望这会发生任何变化):

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

D1[
constant expressionopt
]
属性说明符seqopt

。。。如果存在常数表达式,则其应为积分常数表达式,且其值应大于零。-§8.3.4[dcl.阵列]


因此,在一致性实现中,这个重载总是返回true。

它总是返回false,因为数组不能声明为包含零元素。来自C++11标准(我手头没有更新的标准,我也不希望这会发生任何变化):

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

D1[
constant expressionopt
]
属性说明符seqopt

。。。如果存在常数表达式,则其应为积分常数表达式,且其值应大于零。-§8.3.4[dcl.阵列]


因此,在一致的实现中,这个重载总是返回true。

如果您在g++上用“代码> -PodiaTys/CODE >编译,您将得到<代码> ISO C++禁止零大小数组< /代码>。同样相关:@greatwolf-就是这样!我没有使用
-pedantic
,因为我用ideone.com快速测试了它。谢谢我希望这个重载的目的只是提供统一的容器接口,也就是让数组可以像其他容器一样使用
std::empty
。事实上,目的很清楚,我只是对上面提到的一点感到困惑。如果在g++上使用
-pedantic
进行编译,实际上,您将获得<代码> ISO C++禁止零大小数组< /代码>。同样相关:@greatwolf-就是这样!我没有使用
-pedantic
,因为我用ideone.com快速测试了它。谢谢我希望这个重载的目的只是提供统一的容器接口,也就是让数组可以像其他容器一样使用
std::empty