gpt4 book ai didi

c++ - 未使用 '...' 扩展的参数包

转载 作者:IT老高 更新时间:2023-10-28 23:11:49 25 4
gpt4 key购买 nike

我有这个代码:

#include <iostream>
using namespace std;

int print(int i)
{
cout << endl << i;
}

template<typename ...Args>
inline void pass(Args&&...args)
{

}

template<typename ...args>
inline void expand(args&&... a)
{
print(a) ...; //this doesn't expand
//pass( print(a)... ); this works
}

int main() {
expand(1,2,3,4);
return 0;
}

它会抛出一个错误:

 In function 'void expand(args&& ...)':
error: expected ';' before '...' token
print(a) ...;
^
parameter packs not expanded with '...':
print(a) ...;
^

为什么需要使用pass()函数?

最佳答案

本质上,扩展参数包 E... 会产生一个 list E1, E2, [...], EN,一个E 用于包中的每个元素。这种语法结构仅在列表语法正确的地方有效,例如在函数调用、初始化列表等中。包含多个逗号运算符的表达式不计算在内。

我相信 fold expressions ( N4295: Folding expressions (Andrew Sutton, Richard Smith) ) 你可以简单地写:

(print(a), ...);

在这个表达式中,

  • print(a) 是一个带有未扩展参数包的表达式,
  • , 是运算符,
  • ... 指定右折叠展开。

整个表达式的结果是(print(a), ...)会被转化为

print(a1) , (print(a2), (print(a3), print(a4))) // (assuming four elements). 

关于c++ - 未使用 '...' 扩展的参数包,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33868486/

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