gpt4 book ai didi

c++ - 在编译时通过用索引折叠指针来分配 C 数组

转载 作者:行者123 更新时间:2023-12-04 18:43:09 24 4
gpt4 key购买 nike

我想在 C++17 的编译时将整数转换为字符串文字。我用了this perfect solution .

无论如何,这个解决方案的问题是我无法将 num_to_string 的结果分配给 constexpr char []:

static constexpr const char number_str[] = num_to_string<5683>::value; // ERROR

错误是:

error: initializer fails to determine size of ‘number_str’

error: array must be initialized with a brace-enclosed initializer

我解决这个问题的方式忽略了“我的要求”,即 number_str 必须是一个数组,所以我把它变成了一个指针:

static constexpr const char *number_str{detail::num_to_string<5683>::value};

这一切都很好,但是::)

我仍然很好奇这是否可行,所以我的想法是以某种方式将一个数组复制分配给另一个数组。


有一个数组和指针:

static constexpr char first_array[] = "aaaabbbbcccc";

我想像这样复制初始化第二个数组:

static constexpr char second_array[] = copy_the(first_array);
  1. 我不能使用函数模板,因为函数不能返回 C 数组。
  2. 使用 structs 折叠数组将导致返回一个对象,然后可以将其分配给数组,但不能复制分配数组。
  3. 我尝试将折叠表达式与模板别名和 std::integer_sequence 一起使用,例如:
template <auto Ptr, std::size_t... I>
using explode_array_impl = (Ptr[I], ...);

template <auto Ptr, std::size_t N>
using explode_array = explode_array_impl<Ptr, std::make_index_sequence<N>>;

但它不会工作,因为模板别名需要 type-id= 的右侧。

有没有办法以某种方式将一个数组复制分配给另一个数组?

最佳答案

不能从另一个数组初始化数组变量,只能从大括号括起来的列表。

但是,您可以创建结构化绑定(bind) ( https://godbolt.org/z/VUnrYT ):

struct X {
int x[3];
};

constexpr X func() {
X x{{0, 1, 2}};
return x;
}

auto [y] = func();
static_assert(std::is_same<decltype(y),int[3]>::value);

关于c++ - 在编译时通过用索引折叠指针来分配 C 数组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59008439/

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