如何从较小的 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/