在 cout 语句中首先运行什么?(C++17)

What is run first inside a cout statement? (C++17)

本文关键字:什么 C++17 运行 cout 语句      更新时间:2023-10-16

例如,我有一个很长的陈述,比如

cout << findCurrent() << "," << findLowest() << "," << findHighest() << "," << findThird()<<"n";

findCurrent()会像逻辑规定的那样在findLowest()之前运行吗?

自 C++17 起,这些函数保证从左到右称为,即 首先调用findCurrent(),然后调用findLowest(),依此类推。

C++17 标准参考文献: [expr.shift]/4 (指表达式E1 << E2(:

表达式E1在表达式E2之前排序。

[over.match.oper]/2:(描述重载运算符(

操作数按为内置运算符规定的顺序进行排序。

[介绍执行]/15:

表达式X被称为在表达式之前排序Y如果每个 值计算以及与表达式X关联的每个副作用在每次值计算和与表达式Y相关的每个副作用之前进行排序。

链接到 cpp 首选项摘要


在 C++17 之前,函数调用的顺序是未指定的,这意味着它们可以按任何顺序调用(并且在重复调用时此顺序不需要相同(。

在 C++17 之前,未指定计算顺序。

截至 C++17,需要从左到右进行评估。请参阅M.M的答案以获取标准报价。