gpt4 book ai didi

c++ - 折叠表达式的评估顺序

转载 作者:太空狗 更新时间:2023-10-29 19:51:24 24 4
gpt4 key购买 nike

折叠表达式似乎是将函数应用于元组的每个元素的好方法。但是,如果应用的函数有副作用,函数调用的顺序可能是一个重要的问题。

考虑:

#include <iostream>

template<typename... Ts>
void printStuff(Ts... args)
{
( ([](auto&& v) { std::cout << v << " "; })(args), ... );
std::cout << '\n';
}

int main()
{
printStuff("hello", 42, 1.5f);
// expected output: hello 42 1.5
}

seems to work .

但是这里是否保证了 lambda 的计算顺序,或者我最终会在输出中翻转值?如果我使用不同的运算符将命令链接在一起,答案会改变吗?

最佳答案

运算符的右折叠展开如下:... (arg0 op (arg1 op arg2)) .因此,尽管括号有帮助,但它们不能保证有关各个元素顺序的任何信息。

因此,这一切都留到了op。 .和 comma operator (这与分隔函数参数的逗号不同),即使是 C++17 之前的版本,也是一个硬序列点。它确保了从左到右的评估,没有串扰。

如果您改为使用 + , 将没有排序保证。所以这取决于你使用的运营商。 C++17 添加了更多具有严格顺序保证的运算符(例如 <<)。

关于c++ - 折叠表达式的评估顺序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46056268/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com