返回c类型数组的迭代器?

dom*_*ath 2 c++ arrays

在 MRE https://godbolt.org/z/jdjPzdGeo中,有没有一种方法可以返回c类型数组的迭代器,就像您在in和 中Func看到的那样?我不知道返回类型是什么。std::arrayFunc2Func3

另外,有没有办法让Funcconstexpr 像中那样Func2

编辑:在此处添加代码

#include <array>

std::pair<int*, std::size_t>
Func() noexcept
{
    // why does constexpr instead of static not work?
    static int arr[]  = {1, 2};
    return { arr, std::size(arr) };
}

constexpr std::pair<std::array<int,2>::const_iterator, std::array<int,2>::const_iterator>
Func2() noexcept
{
    constexpr std::array<int, 2> arr  {{1, 2}};
    return { std::cbegin(arr), std::cend(arr) };
}

std::pair<std::array<int,2>::const_iterator, std::array<int,2>::const_iterator>
Func3() noexcept
{
    static std::array<int, 2> arr  {{1, 2}};
    return { std::cbegin(arr), std::cend(arr) };
}

int main()
{
    Func();
    Func2();
    Func3();
}
Run Code Online (Sandbox Code Playgroud)

eer*_*ika 7

返回c类型数组的迭代器?

我不知道返回类型是什么。

数组的迭代器类型是指针。例如,如果您有一个 数组int,则该数组的迭代器类型为int*

并期望返回类型是某种迭代器。

int*是一个迭代器。

int* 适用于 std::begin 但 std::cbegin 呢?

如果你想要一个常量迭代器,那就是const int*.


Func2据我所知,你的返回悬挂着迭代器。不要将迭代器、引用等返回到具有自动存储持续时间的对象。