问题标签 [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++ - 使用折叠表达式为数组实现运算符less
我正在使用最新的 clang++ 在 c++17 中使用折叠表达式。我尝试使用我想用于固定大小字符串的数组来实现 less 运算符。
这就是我要去的地方。有没有更好的方法来做到这一点,尤其是避免在表达式中分配索引?
使用“clang++ test_fold_expr_less.cpp -o test_fold_expr_less -std=c++1z”编译它,输出在这里。
c++ - Clang 和二进制折叠表达式——空参数包的诅咒
特别是 Clang 3.6.0,目前由 Coliru 托管。
所有这些片段都是从以下位置调用的:
以下代码:
触发以下编译错误:
所以我尝试在表达式周围加上括号:
它有效,但会触发警告:
因此,我尝试使用函数样式强制转换来丢弃表达式的值void
:
但 :
我也尝试了static_cast
,结果相同。
所以我尝试使用 C-cast 代替:
但是之后 :
...而我的输出只是----
:foo(1, 2, 3);
不再输出了!
从未来的标准来看,Clang 是被邪恶力量诅咒了,它有错误吗,还是问题现在就在我的椅子上?
c++ - 使用折叠表达式填充数组时的语法问题
是的,我可以使用std::initializer_list
. 是的,更简单的是,我可以进行聚合初始化。但这是如何工作的?我似乎无法绕过 C++17 的折叠表达式。那里没有足够的例子。
这是我想出的:
编辑:用最新的 Clang 编译。支持折叠表达式。
c++ - 折叠表达式是 C++14 还是 C++1z 功能?
https://isocpp.org/std/the-standard指出工作草案N4296
包含 C++14 标准以及较小的编辑更改。
我注意到 N4296 §5.1.3 包含“折叠表达式”的规范。我认为这是一个没有达到官方 C++14 标准的功能。
折叠表达式是 C++14 的一部分,还是 N4296 中的这个添加是那些小的编辑更改之一?
c++ - C++17 中的折叠表达式 - 比较运算符的用例
根据N4295 C++17 将允许我计算未知数量的参数的总和,因此:
该文档进一步指出,我可以使用 == 或 > 等运算符来代替 +。任何人都可以想出一个明智的例子,说明我什么时候想在这样的构造中使用 == 或 >?
(我意识到人们可以定义 == 和 > 来对奇怪的类做奇怪的事情,但这肯定违反了良好的做法。写作a > b > c > d
从来都不是一个好主意,是吗?)
c++ - GCC 以错误的方式解包 (I < ...) 折叠表达式
我已经向 GCC 打开了一个错误,但我想知道我的期望是否正确。
考虑这个提议和下面的折叠表达式:
它应该等同于:
考虑以下代码:
断言编译并正常工作,它不会失败(确实如预期的那样,请注意结果不是((0 < 42)和(42 < 3)),表达式本身非常不寻常且毫无意义)。
另一方面,当使用折叠表达式时:
断言在编译时失败(GCC 6.1.0)。
由于提案中包含的内容,我希望它能够编译。
它应该成功,因为它等效于上面不涉及折叠表达式的示例。
解压后的表达式确实应该是:((0 < 42) < 3)。
我是对的还是我在这里遗漏了一些关于折叠表达式的重要内容?