Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/127.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 两面都有省略号的Lambda pack capture-这是什么意思?_C++_Lambda_Variadic Templates_C++20 - Fatal编程技术网

C++ 两面都有省略号的Lambda pack capture-这是什么意思?

C++ 两面都有省略号的Lambda pack capture-这是什么意思?,c++,lambda,variadic-templates,c++20,C++,Lambda,Variadic Templates,C++20,,批准用于C++20,允许通过在包扩展之前放置省略号(…)作为lambda捕获的一部分来生成一组闭包数据成员 例如,在通过移动捕获包时,这非常有用: template <typename... Ts> void foo(Ts... xs) { bar([...xs = std::move(xs)]{ /* ... */ }); } 模板 无效foo(Ts…xs) { 条([…xs=std::move(xs)]{/*…*/}); } 在使用此功能时,我想出了一个神秘的结构:

,批准用于C++20,允许通过在包扩展之前放置省略号(
)作为lambda捕获的一部分来生成一组闭包数据成员

例如,在通过移动捕获包时,这非常有用:

template <typename... Ts>
void foo(Ts... xs)
{
    bar([...xs = std::move(xs)]{ /* ... */ });
}
模板
无效foo(Ts…xs)
{
条([…xs=std::move(xs)]{/*…*/});
}
在使用此功能时,我想出了一个神秘的结构:

template <typename... Ts>
void foo(Ts... xs)
{
    [...xs...]{}();
}

int main()
{
    foo(0, 1, 2);
}
模板
无效foo(Ts…xs)
{
[…xs…]{}();
}
int main()
{
foo(0,1,2);
}


g++(trunk)编译了它,但我真的很难理解它的含义。这是什么意思?生成闭包作为数据成员有哪些内容?

它的格式应该不正确。已存档(…并且已修复!)中的语法是:

捕获:
简单捕获
opt
opt init capture

您可以拥有一个简单的捕获(即
xs…
或者拥有一个init捕获(即
…xs=xs
,init捕获需要有一个初始值设定项)。你不可能同时拥有这两样东西