gpt4 book ai didi

c++ - 是否有标准名称(模板或宏)来替换 ARRAY_SIZE、_countof 等?

转载 作者:可可西里 更新时间:2023-11-01 17:40:16 27 4
gpt4 key购买 nike

我不是在谈论 std::array 或任何东西,只是经典的 Vanilla C/C++ 数组。我知道可以实现 ARRAY_SIZE/_countof 的各种方式,我只是想知道他们是否已经设法为此标准化了一个名称(在 std:: 我假设)。如果没有,是否有相关建议?

最佳答案

当前的解决方法

std::extent - 数组的大小

如果您正在使用 native 数组,您可以使用 std::extent 来自 <type_traits> ,用于生成数组的 Nth 维(默认为第一个)中的元素数。

int a1[1024];
int a2[std::extent<decltype(a1)>::value]; // int[1024]

一点间接(通用解决方案,不仅仅是数组)

没有一个名称可以替代您所描述的内容,但自从 C++11 以来,人们可以使用 std::begin std::end 为合适的实体获取迭代器,并与 std::distance 一起你有一种“极好的”方法来获得具有合适品质的东西的大小。

int a1[1024];
auto n = std::distance (std::begin (a1), std::end (a1)); // 1024


上述解决方案的缺点是这三个函数在 C++11 中都不是constexpr,甚至在 C++14 中也是如此 std::distance仍然不是constexpr(其他两个是)。

这意味着该解决方案不能用于需要常量表达式的上下文中。

如果您确定您正在使用提供 RandomAccessIterators 的实体,则解决方法之一是使用 std::end (e) - std::begin(e)如果需要常量表达式 (C++14)。



展望 future

N4280建议我们添加 std::size到标准库,实际上正是您要寻找的东西。

int a1[1024];
auto n = std::size (a1);

如果一切按计划进行,我们将在 C++17 中使用它。

关于c++ - 是否有标准名称(模板或宏)来替换 ARRAY_SIZE、_countof 等?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29069638/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com