C++ 如何从constexpr char构造更大的std::数组*

C++ 如何从constexpr char构造更大的std::数组*,c++,c++17,constexpr,C++,C++17,Constexpr,如何从较小的constexpr const char*构造std::array #包括 Struct A{ 模板 constexpr A(constchar&p)[N]):A(p){ std::数组a; } int main() { constexpr const char*s=“asdasd”; constexpr A(s);; } 以上内容无法编译。有可能吗标准::memcpy不工作,因为它不是constexpr。 for循环可以工作,这是愚蠢的…?您不能从constexpr const

如何从较小的
constexpr const char*
构造
std::array

#包括
Struct A{
模板
constexpr A(constchar&p)[N]):A(p){
std::数组a;
}
int main()
{
constexpr const char*s=“asdasd”;
constexpr A(s);;
}
以上内容无法编译。有可能吗<代码>标准::memcpy不工作,因为它不是constexpr。
for循环可以工作,这是愚蠢的…?

您不能从
constexpr const char*
执行,因为它会丢失大小信息。但是您可以从一个
constepr 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);
}
#包括
#包括
模板
constexpr自动生成数组(const char(&arr)[N],std::index_序列){
返回std::数组{arr[Ix]…};
}
结构A{
模板
常量表达式A(常量字符(&p)[N]):
a(make_数组(p,std::make_索引_序列{})){}
std::数组a;
};
int main()
{
constexpr decltype(auto)s=“asdasd”;
constexpr A(s);;
}

“for循环可以工作,这很愚蠢…”嗯,为什么?你在复制一个字符串。“这没什么问题。”事实上,我也会的。我很马虎,N已经被拿走了:)我会编辑。