【发布时间】:2020-06-10 07:32:01
【问题描述】:
int a()
{
return 1;
}
int b()
{
return 2;
}
int c()
{
return 3;
}
int g(int, int)
{
return 0;
}
void f(int, int)
{}
int main()
{
f(g(a(), b()),
c());
}
我知道根据 C++ 标准未指定函数参数的评估顺序。
换句话说,实际的评估顺序可能是:
a(), b(), c()c(), a(), b()b(), a(), c()c(), b(), a()
我只是想知道:
C++ 标准是否保证c() 永远不会在a() 和b() 之间被调用?
【问题讨论】:
-
一个参数的计算不会与同一个调用中另一个参数的计算重叠。但求值并不是通常意义上的原子,因为在不同线程中求值的表达式可能会重叠。
-
我们不应该将标题中的“原子性”替换为“顺序”,以便标题和问题正文匹配吗?
标签: c++ function arguments standards