问题标签 [fold-expression]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
2 回答
295 浏览

c++ - VS2017 是否完全支持折叠表达式?

我发现了一篇有趣的文章,并用 MSVS 2017 尝试了它的代码:

,但代码没有编译错误:

这是否意味着VS2017不完全支持折叠表达式?

0 投票
1 回答
65 浏览

c++ - 我可以在这个例子中使用折叠表达式吗

我想知道是否可以在下面的示例中使用折叠表达式(以及如何编写它)。

我试过到目前为止,但我没有弄清楚!

谢谢你。

0 投票
1 回答
543 浏览

c++ - 赋值中的折叠表达式

我正在尝试使用折叠表达式来简化一些代码。在以下代码中,我试图将元素插入到数组中,但折叠表达式无法编译

编译器抱怨缺少';'

0 投票
1 回答
284 浏览

c++ - 使用折叠表达式初始化静态 constexpr 类数据成员无法编译

即使非常相似的代码可以编译,我也对无法编译的特定代码感到困惑。

这不会编译:

具有启发性的错误1>c:\...\source.cpp(5): error C2059: syntax error: '...'

这编译:

这也编译:

我在 Visual Studio 15.9.8 中使用 MSVC++ 进行编译。我错过了什么?

编辑:我正在用/std:c++17标志编译。尝试/std:latest没有帮助。

0 投票
1 回答
3112 浏览

c++ - 是否有理由使用 std::conjunction/std::disjunction 而不是“&&”/“||”上的折叠表达式?

是否有任何特定情况您不能正确使用std::conjunction/std::disjunction并且不使用更“基本”(即语言功能而不是库功能)折叠表达&&/ ||

例子:

对比

使用折叠表达式的版本更简短,通常更易读(尽管对此可能有不同的看法)。所以我不明白为什么将它与折叠表达式一起添加到库中。

0 投票
1 回答
974 浏览

c++ - 从折叠表达式创建一个带分隔符的字符串

我有以下功能:

它可以完美地将参数连接成一个字符串,但正如预期的那样,它给出的输出没有任何分隔符。是否有可能以某种方式分隔输入?

样本输出:

elg.Debug("asd", "qwe", 123);

// 打印:asdqwe123

// 应该打印类似的东西:asd qwe 123

我是否必须为此推出自己的字符串流替换?

0 投票
3 回答
673 浏览

c++ - 折叠表达式与编译递归

我们c++17有折叠表达式,它可以极大地简化可以使用编译器递归和 SFINAE 或重载来实现的代码。例如,在下面的代码中

c++17函数printer(取自cpp 参考c++11)的工作与其版本完全相同printer_cpp11

在编译时,会生成函数的几个重载,而使用折叠表达式需要printer_cpp11一个函数。printer

c++11在使用 fold 表达式而不是-style时在性能方面有优势吗?或者可以假设编译器内联 的所有重载printer_cpp11,从而创建具有同等性能的代码?

0 投票
4 回答
284 浏览

c++ - 折叠表达式和 cout

我有以下有效的代码,但我对它的工作原理感到困惑。

输出:

123

我的困惑:

我希望打印 321。

我想要这个订单:

但我无法编译...

0 投票
1 回答
57 浏览

c++ - 当构造函数自行解压可变参数模板类?

这是我上一篇文章的后续。我已经成功地设置和获取类的值。但是,现在我试图更进一步,让构造函数将自己作为参数。但是,我不确定如何正确解压缩它。

我努力了:

但是,在这种情况下,classes was not declared in this scope当我尝试将其传递给初始控制器构造函数时会出错。我也尝试过注释掉的模板声明,但是我认为这也不正确。我也尝试过Controller&...controllers(Classes&...)...) : (Controller(Classes&...classes));,但这也不起作用。

我真的不知道接下来要尝试什么,或者我所要求的是否可以做。或者,如果我将整个班级模板化,这可能会更容易。我只是想避免Controller<A,B> controller(A,B);,而只是创建Controller controller(A,B). 但是,我理解是否必须以其他方式进行。

编辑:我应该澄清我正在尝试做的事情:

然后,这将设置所有类的所有值并获取控制器内所有类的值。

0 投票
1 回答
215 浏览

c++ - 在使用声明引入的折叠表达式中使用运算符是否合法?

我正在尝试在折叠表达式中使用任意函数,当我发现以下代码可以gccclang.

https://godbolt.org/z/-LOudM

似乎clang没有考虑重载运算符,而是尝试>>=在折叠表达式中使用正则运算符。

但是,如果改为拼写折叠表达式,clang则考虑重载运算符并且编译得很好:

这是一个clang错误吗?或者折叠表达式的拼写等价不完全等价?