非成员 std::固定大小数组的空重载的返回值
Return value of non-member std::empty overload for fixed-size arrays
[接受的]标准论文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。
相关文章:
- 如何在C++初始化时更改数组的值?
- 遇到此问题时遇到困难:允许用户输入数组的值并使用 for,而循环也输出输入的最大数字
- 数组初始值设定项的构造函数歧义
- 我们可以将集合的值存储在变量中吗?就像我们可以将数组的值存储在变量中一样
- 我正在尝试解决一个需要数组总和值但代码不起作用的问题,我想做这样的事情
- C++:数组<>初始值设定项太多
- 查找数组中指示性较大但数组中值较小的元素
- 在 Arduino 中为 2D 指针数组赋值
- 我无法为 2D 数组赋值
- 如何在C++中初始化值,然后稍后为uint32_t数组赋值
- 尝试设置唯一指针布尔数组的值时BAD_ACCESS错误
- 返回数组中值的指针地址
- C++ bool 数组返回 1 或 0 以外的值
- 数组在函数中作为参数传递并被访问,那么为什么从函数返回后数组的值会被修改呢?
- C++:如何通过异常处理从越界数组返回值
- 用于循环数组赋值的C++.正在返回垃圾邮件
- 将数组的值传递给修改值的函数,然后将其返回到新数组中
- 从并行数组返回值,并在以后的函数中使用这些值
- 如何在gsoap中使字符串数组返回值
- 如何从向量 3 一维数组返回 y 值