gpt4 book ai didi

C++0x 可变参数包 : Syntax

转载 作者:可可西里 更新时间:2023-11-01 16:13:04 26 4
gpt4 key购买 nike

以下代码片段在 gcc4.6.1 下无法编译:

template <typename... TS>
void do_stuff(TS... ts)
{
auto f = [](TS... things) { };
}

它会抛出一个错误,说明 pack things 没有展开。但是,以下代码确实可以编译:

template <typename... TS>
void do_stuff(TS... ts)
{
auto f = [](TS... things...) { };
}

注意参数列表中的内容之后的额外解包运算符。我从未见过在声明期间必须扩展可变参数包的情况。所以我想问你们好心人的问题是:

这是合法的 C++0x 语法(编译的片段)还是 GCC 在处理可变类型时的一个怪癖?

最佳答案

两件事:

  • 是的,GCC 拒绝 [](TS... things) { } 是错误的。它可能尚未实现。
  • 您通过 [](TS ... things...) { } 声明的内容等同于 [](TS... things, ...)。在 C++ 中(不是在 C 中),您可以在 C 风格的可变参数省略号之前省略逗号。因此,您可以声明 void printf(char const *fmt...) 而不是执行 void printf(char const *fmt, ...)。这就是你的 lambda 中发生的事情。第一个省略号是参数包拆包,第二个省略号是 C 风格的可变参数省略号。

关于C++0x 可变参数包 : Syntax,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6831554/

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