clang 3.6倍左右表达
clang 3.6 fold expression left/right
我正在尝试clang 3.6'-std=c++1z'的fold表达式,但我不太明白。我正在测试的功能是:
auto minus = [](auto... args) { return (args - ...); };
...
std::cout << minus(10, 3, 2) << std::endl;
根据n4191,我预计它会以左折叠的形式扩展到
(10 - 3) - 2
这给出了结果5,然而,结果是9,这似乎是一个右折叠展开,即
10 - (3 - 2)
我是不是遗漏了什么或理解错误n4191?感谢
n4191由n4295修订。据此,形式为(e op ...)
的表达式是一元右折叠,并且它被展开为:E1 op (... op (EN-1 op EN))
,即作为右折叠展开。
这似乎与n4191所说的折叠方向相反。Clang 3.6实现了n4295方案,如图所示。
... - args
将是一元左折叠,并按所需方向展开。
相关文章:
- 我想知道长双倍和双倍之间的区别
- <T> 通过模板化运算符重载将 std::complex 乘以双倍
- 如何编写一个使用n倍三元条件语句的C++布尔函数
- FLTK 2.0构建和演示,适用于VS2019的2011年左右的代码库
- 按值 C++ 返回时进行双倍移动
- 求和 int 乘以双倍时的欠/过近似
- 从'size_t'转换为"常量双倍",可能会丢失数据
- 二叉搜索不收敛为双倍
- 编写一个代码,使年利率翻倍
- 将一个双倍值乘以10会发生什么
- C++数组与向量排序(在我的情况下,向量比数组慢~2.5倍(无优化))
- 将非常大的 int 转换为双倍,在某些计算机上会损失精度
- 双吨级 - 从单级过渡到双倍级
- 如何将包含指数的 QString 转换为C++中的双倍?
- 计算阶乘的 C++17 倍表达式中的错误
- 防止在字符数组中输入双倍空格在 C++
- 将uintptr_t转换为布尔值会使 SSO 基准速度减慢数倍
- 将双倍转换为 LPARAM 的麻烦
- 不使用与左右停止工作命名空间 std 的简单比较
- clang 3.6倍左右表达