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++17开始就可以保证了。N4659(2017年3月后Kona工作草案C++17 DIS)[介绍.执行]18, 读作:
对于每次函数调用
F
对于每次评价A
其内F
而每次评估B
不在F
但在同一线程上作为同一信号处理程序(如果有的话)的一部分进行评估,要么是A
前的排序。B
或B
前的排序。A
. 换句话说,函数的执行不会相互交错。
在C++17之前,我们没有这样的保证。