gpt4 book ai didi

c++ - 省略号出现在模板函数的参数声明中

转载 作者:行者123 更新时间:2023-11-30 02:24:43 24 4
gpt4 key购买 nike

这是来自 cppreference 的示例.我不明白这种模式是如何扩展的。

template<typename ...Ts, int... N> void g(Ts (&...arr)[N]) {}
int n[1];
g<const char, int>("a", n); // Ts (&...arr)[N] expands to
// const char (&)[2], int(&)[1]

Note: In the pattern Ts (&...arr)[N], the ellipsis is the innermost element, not the last element as in all other pack expansions.

问题一:arr是什么?

问题2:n是一个int数组,是否匹配到int...N?

问题三:怎么可以展开为const char(&)[2], int(&)[1]

最佳答案

鉴于

template <typename ...Ts> void f(Ts&...arr);

基本上等同于

template <typename T0, typename T1, .., typename TN>
void f(T0& arr0, T1& arr1, .., TN& arrN);

对于任何N .

同理,

template <typename ...Ts, int... Ns> void g(Ts (&...arr)[Ns]);

相当于

template <typename T0, typename T1, .., typename TN, int N0, int N1, .. int NN>
void g(T0 (&arr0)[N0], T1 (&arr1)[N1], .., TN (&arrN)[NN]);

然后输入 T (&)[N]是对大小为 N 的 C 数组的引用具有 T 类型的元素

int n[1];通常是 int [1] 类型.

"a"类型为 const char[2] ({'a', '\0'})。

关于c++ - 省略号出现在模板函数的参数声明中,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45155833/

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