问题标签 [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.
c++ - C++17 参数包编译错误
我有一个来自互联网的程序,如下所示,以展示 C++17 中“参数包”的能力
但是当我用 g++5.3 和 6.1 用 -std=c++17 编译它时,报错了,我不明白错误信息是关于什么的:
你能帮忙解释一下吗?非常感谢。
c++ - C++17:integer_sequence 使用与编译错误
我希望使用 integer_sequence 来判断一个数字范围是否都在某个值以下: is_range() 将返回 true,否则返回 false,如下所示:
我用clang3.8编译它,但是失败了。
我应该如何更正我的代码?我想我对折叠表达式的理解是不正确的
如何纠正它?
c++ - cout 中的 C++17 折叠表达式
我正在学习新的 c++17 fold expression,我从c++17 fold expression看到了这段代码。我想知道为什么这段代码有效:
但不是这个:
在我看来,这似乎也是合乎逻辑的,并且会颠倒打印顺序。
c++ - 使用折叠表达式将参数包扩展为 lambda - gcc vs clang
考虑以下代码片段:
g++ 7.0编译失败,出现以下错误:
删除post
调用和 lambda使 g++ 编译折叠表达式。
lambda、折叠表达式和模板函数调用之间的这种交互是否被标准以某种方式禁止,或者这是一个 gcc 错误?
c++ - 是否可以保证使用折叠表达式的参数包扩展的编译复杂性
当所有类型的参数包都相同时,我可以想象一个直接有效的折叠表达式扩展实现(简化的 c++11 示例):
当然,当我们考虑更一般的情况时,即当我们不能真正假设类型相同时,我们可以将引用替换为参数类型std::array
的引用。std::tuple
然而,在这种情况下,元组本身很可能会导致扩展的复杂性随着参数数量的对数增长。
它可以使编译器在本质上处理折叠表达式,以确保扩展的复杂性是,但是在[expr.prim.fold]O(N)
部分的 C++ 标准草案中,我看不到对此的保证。
我们可以假设使用折叠表达式扩展参数包很便宜吗?
c++ - 如何在“折叠表达式”中也可以使用“短路评估”?
传统&&
算子支持短路求值,所以false && (*pb = true)
在运行时会ok,但下面两种情况不行。
如何使短路评估也可用fold expressions
?
c++ - 使用折叠表达式打印所有带有换行符的可变参数
C++17 折叠表达式的经典示例是打印所有参数:
例子:
输出:
我想在我的输出中添加换行符。但是,我找不到这样做的好方法,这是迄今为止我发现的最好的方法:
然而,这不是零开销,因为它ostringstream
为每个参数构造了一个临时的。
以下版本也不起作用:
和
我明白为什么最后两个版本不起作用。使用折叠表达式是否有更优雅的解决方案来解决这个问题?
c++ - 在折叠表达式中使用 lambda 时出现“未初始化的捕获引用”错误 - clang vs gcc
考虑以下代码:
调用和打印fold_left(cat, a, b, c)
时,g++7 和 clang++5 都输出:
((a, b), c)
调用和打印fold_left(cat, a, b, c, d)
(超过 3 个参数)时,clang++5 输出:
(((A B C D)
相反 g++7 会产生一个奇怪的编译时错误(缩短):
我的代码是否由于某种原因格式错误,或者这是一个 g++7 错误?