问题标签 [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 投票
1 回答
596 浏览

c++ - 为什么左折叠表达式不反转右折叠表达式的输出?

我正在查看 C++17折叠表达式,我想知道为什么以下程序输出

对于这两个for_each电话

Live Example

我认为第二个折叠表达式是为了以相反的顺序输出数字

结果怎么都一样?

0 投票
1 回答
687 浏览

c++ - 使用折叠表达式为数组实现运算符less

我正在使用最新的 clang++ 在 c++17 中使用折叠表达式。我尝试使用我想用于固定大小字符串的数组来实现 less 运算符。

这就是我要去的地方。有没有更好的方法来做到这一点,尤其是避免在表达式中分配索引?

使用“clang++ test_fold_expr_less.cpp -o test_fold_expr_less -std=c++1z”编译它,输出在这里。

0 投票
3 回答
1489 浏览

c++ - Clang 和二进制折叠表达式——空参数包的诅咒

特别是 Clang 3.6.0,目前由 Coliru 托管。

所有这些片段都是从以下位置调用的:

以下代码:

触发以下编译错误:

所以我尝试在表达式周围加上括号:

它有效,但会触发警告:

因此,我尝试使用函数样式强制转换来丢弃表达式的值void

但 :

我也尝试了static_cast,结果相同。

所以我尝试使用 C-cast 代替:

但是之后 :

...而我的输出只是----foo(1, 2, 3);不再输出了!

从未来的标准来看,Clang 是被邪恶力量诅咒了,它有错误吗,还是问题现在就在我的椅子上?

0 投票
2 回答
1344 浏览

c++ - 您可以在折叠表达式中使用子表达式吗?

以下是合法的折叠表达式吗?

它用clang但不是gcc 编译

0 投票
2 回答
2213 浏览

c++ - 使用折叠表达式填充数组时的语法问题

是的,我可以使用std::initializer_list. 是的,更简单的是,我可以进行聚合初始化。但这是如何工作的?我似乎无法绕过 C++17 的折叠表达式。那里没有足够的例子。

这是我想出的:

编辑:用最新的 Clang 编译。支持折叠表达式。

现场示例: http ://coliru.stacked-crooked.com/a/777dc32da6c54892

0 投票
1 回答
323 浏览

c++ - 约束的部分排序中如何使用折叠表达式?

§14.10.3 N4553 的约束 [temp.constr.order]部分排序指定由概念和逻辑运算符形成的约束表达式应部分排序并用于在重载的情况下选择最佳可行函数。但这是否也适用于使用逻辑运算符折叠表达式的约束表达式?

例如,gcc在此处给出一个模棱两可的重载错误是否正确,或者代码是否有效,打印“c”?

0 投票
2 回答
328 浏览

c++ - 折叠表达式的关联性

N4191向 C++ 提出了折叠表达式。那里的定义是

是一个左折叠(即(((a0 + a1) + a2) + ...),并且

是右折叠(即(... + (a8 + (a9 + a10)))。但是,修订后的论文N4295颠倒了左右一元折叠的定义。

问题:原理是什么?从左到右进行评估似乎更直观(至少当您习惯于从左到右的字母表时)(args + ...)

0 投票
1 回答
359 浏览

c++ - 折叠表达式是 C++14 还是 C++1z 功能?

https://isocpp.org/std/the-standard指出工作草案N4296

包含 C++14 标准以及较小的编辑更改。

我注意到 N4296 §5.1.3 包含“折叠表达式”的规范。我认为这是一个没有达到官方 C++14 标准的功能。

折叠表达式是 C++14 的一部分,还是 N4296 中的这个添加是那些的编辑更改之一?

0 投票
3 回答
2130 浏览

c++ - C++17 中的折叠表达式 - 比较运算符的用例

根据N4295 C++17 将允许我计算未知数量的参数的总和,因此:

该文档进一步指出,我可以使用 == 或 > 等运算符来代替 +。任何人都可以想出一个明智的例子,说明我什么时候想在这样的构造中使用 == 或 >?

(我意识到人们可以定义 == 和 > 来对奇怪的类做奇怪的事情,但这肯定违反了良好的做法。写作a > b > c > d从来都不是一个好主意,是吗?)

0 投票
1 回答
177 浏览

c++ - GCC 以错误的方式解包 (I < ...) 折叠表达式

我已经向 GCC 打开了一个错误,但我想知道我的期望是否正确。

考虑这个提议和下面的折叠表达式:

它应该等同于:

考虑以下代码:

断言编译并正常工作,它不会失败(确实如预期的那样,请注意结果不是((0 < 42)和(42 < 3)),表达式本身非常不寻常且毫无意义)。
另一方面,当使用折叠表达式时:

断言在编译时失败(GCC 6.1.0)。
由于提案中包含的内容,我希望它能够编译。
它应该成功,因为它等效于上面不涉及折叠表达式的示例。
解压后的表达式确实应该是:((0 < 42) < 3)。

我是对的还是我在这里遗漏了一些关于折叠表达式的重要内容?