如何从较小的 std::array<char,512> 构造 constexpr const char*

#include <array>

strcut A{
    template<std::size_t N>
    constexpr A(const char (&p)[N]) : a(p) {}
    std::array<char, 512> a;
}

int main()
{
    constexpr const char* s = "asdasd";
    constexpr A a(s);
}


以上不编译。有可能吗? std::memcpy 不起作用,因为它不是 constexpr。
for 循环会起作用,这是愚蠢的......?

最佳答案

您不能从 constexpr const char* 执行此操作,因为它会丢失大小信息。但是你可以从 constexpr char[] ,你从文字中获得,这很容易:

#include <array>
#include <utility>

template<size_t N, size_t I, size_t... Ix>
constexpr auto make_array(const char (&arr)[N], std::index_sequence<Ix...>) {
    return std::array<char, I>{arr[Ix]...};
}

struct A{
    template<std::size_t N>
    constexpr A(const char (&p)[N]) :
          a(make_array<N, 512>(p, std::make_index_sequence<N>{})) {}

    std::array<char, 512> a;
};

int main()
{
    constexpr decltype(auto) s = "asdasd";
    constexpr A a(s);
}

关于c++ - 如何从 constexpr char* 构造更大的 std::array,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/56278339/

10-11 22:40
查看更多