COUT 内部函数调用的顺序
order of function call inside cout
我试图知道cout语句中函数的执行顺序
我试过这组代码
#include < iostream >
using namespace std;
int i=0;
int sum(int a)
{
i++;
return a+i;
}
int main()
{
cout << sum(3) << sum(2) ;
return 0;
}
"我预计输出是 44,但实际输出是 53">
如下所述: https://en.cppreference.com/w/cpp/language/eval_order
任何表达式的任何部分的求值顺序,包括 函数参数的计算未指定(有一些例外 下面列出(。编译器可以计算操作数和其他 子表达式按任意顺序排列,并且可以在 再次计算相同的表达式。
中没有从左到右或从右到左评估的概念 C++。不要与从左到右和从右到左混淆 运算符的结合性:解析表达式 a(( + b(( + c(( 作为 (a(( + b((( + c((,由于运算符+的从左到右结合性, 但是对 C 的函数调用可以首先、最后或之间计算 运行时的 a(( 或 b((
在您的生产线上
cout << sum(3) << sum(2)
两个operator<<
调用的顺序取决于您使用的运算符(此处<<
从左到右(,但每个子表达式(即 sum(3)
和 sum(2)
(的计算没有定义的顺序,并且取决于编译器的情绪(通常是最优化的编译方法(。
有关信息,以下是运算符关联性列表:https://en.cppreference.com/w/cpp/language/operator_precedence
相关文章:
- 函数调用中参数的顺序重要吗
- x64 函数调用参数推送/移动顺序 (MSVC)
- COUT 内部函数调用的顺序
- 构造函数的初始值设定项列表中的函数调用是否按顺序排序?
- C++:cout 和函数调用之间的计算顺序
- 当指定初始化程序的顺序和字段声明不一致时,clang可以删除函数调用
- 函数调用的顺序
- 构造函数和析构函数调用的顺序
- 析构函数调用的顺序C++
- 在虚拟继承中构造函数调用的顺序是什么
- 可变模板扩展中函数调用的顺序
- 如何将 etrace 与动态库结合使用,以按时间顺序跟踪 C++ 中的函数调用
- STL 中构造函数调用的顺序
- 此代码是否依赖于函数调用顺序未定义的行为
- 强制实施函数调用的顺序
- 函数调用的顺序
- 使用继承时构造函数/析构函数调用的顺序
- 链式静态函数调用之间的参数求值顺序
- 在块程序结束时析构函数调用的顺序
- 无法理解析构函数调用顺序