问题标签 [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 回答
1413 浏览

c++ - MSVC 中的折叠表达式

我有以下计算平均值的函数:

使用 VS 2017 15.6.0 Preview 3 以下代码

输出2.5。似乎 MSVC 将折叠表达式解释为1 + 3 / N而不是(1 + 3) / N. 如果我在折叠表达式周围添加额外的括号,结果是正确的。使用 GCC,不需要额外的括号。

这是 MSVC 中的错误还是我们需要额外的括号?

0 投票
1 回答
235 浏览

c++ - 用运算符折叠表达式 >>

考虑以下代码段:

writeall中,我使用折叠表达式输入std :: cout参数包。一切正常,我被1234打印到屏幕上。

readall中,我做的完全一样,期望从std :: cin参数包中读取。但是,我得到

我究竟做错了什么?人们会期望事情完全一样,我只是用 operator 替换<<了 operator >>

0 投票
1 回答
961 浏览

c++17 - 如何使用折叠表达式在 (cout << ... << args) 中插入空格?

给定

如何添加空格让我们得到1 2 3 4

更新:

正确答案: ((std::cout << args << ' ') , ...);

0 投票
1 回答
76 浏览

c++ - 从一个值和一个大小创建递归函数参数列表

我的意图是创建一个大小为 n 的函数参数列表,这样我就可以将它传递给一个帮助器,该帮助器使用折叠表达式将这些值递归地相乘。

我对如何使参数列表传递给助手有点困惑。有没有办法在没有包表达式的情况下创建函数参数列表?也许通过创建一个数组或元组?

到目前为止,这是我想出的。

0 投票
1 回答
87 浏览

c++ - 与给定类型相似的最广泛的类型 - C++

标准中是否有任何“工具”,用于此类模板功能:

可以说,此模板中的每个参数类型都是相同的。例如: nstd::int32_t的平均值。我用 imaginarywidest_type_t来可视化用法。平均计算需要对每个参数求和,因此,为了避免(或尽可能减少)溢出,我需要尽可能使用最大宽度类型。例子:

  • char->std::intmax_t
  • std::uint16_t->std::uintmax_t
  • float-> long double(或其他类型,由实现决定)

当然,我可以自己写这个,但是在标准中有这样的东西会很好。

编辑:
我可以使用移动平均,但是这个函数将只用于少量参数(通常是 2-8),但我使用的类型很容易“溢出”。
编辑2:
我也知道,对于大量参数,最好使用任何类型的数组。

0 投票
1 回答
596 浏览

c++ - 如何使用特定类型的折叠表达式?

我有一个函数来检查 a 是否std::string包含子字符串。我将字符串传递为std::string_view,这样就不会发生复制。

我现在想创建一个函数,使用新的 C++17 折叠表达式来检查字符串是否包含多个子字符串。同样,我想通过std::string_views 传递它们。

我怎样才能做到这一点?

据我所知,上面的版本会将子字符串作为它们进来的类型。所以 astd::string会被复制。如何将类型修复为std::string_view?就像是:

0 投票
3 回答
1016 浏览

c++ - C ++一元右折叠与逗号运算符的一元左折叠

为什么逗号分隔的一元左折叠会产生与右折叠相同的结果?

实时代码

输出:

不应该是:

?

0 投票
1 回答
907 浏览

c++ - 指向折叠表达式中的成员函数的指针

此代码多次调用 &foo::next

现在我想用一个折叠表达式替换递归调用

例子:

它无法编译,因为指向成员调用的指针的正确语法是

如何使用模板折叠表达式获得相同的结果?谢谢!

0 投票
3 回答
213 浏览

c++17 - 使用任意数量的参数生成对 lambdas 的调用

以下定义已被证明对我非常有用:

基本上,折叠在逗号运算符上的参数包允许定义对接受参数的函数的多个调用。例如:

将在和1上调用匿名 lambda 。2"hello"

提出了这个想法,我想做同样的事情,但传递带有两个、三个等参数的 lambda。例如,类似的东西

任何可以实现它的线索、技术、想法等?

0 投票
3 回答
4569 浏览

c++ - 在 C++14 中这个 C++17 折叠表达式有什么好的替代方法?

这是 C++17 中基于 lambda 的简洁、简洁的折叠表达式:

我有这段代码是为了在 C++14 中做类似的事情而编写的,但它似乎比它应该的更冗长和混乱。我正在寻找一种以相对清晰和简洁的方式在 C++14 中表达上述 C++17 代码的方法。准确地说,我希望能够编写代码,使用类似函数调用的语法计算某个已知维数的向量的向量幅度的平方。但是,维度的数量可以任意变化。并且坐标系的各个分量的精确数字类型也可能是任意的,并且可能是异构的。但是在 C++14 中处理 C++17 折叠表达式的一般方法是理想的。