[英]Does C++ guarantee the atomicity of argument evaluation?
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());
}
我知道 function arguments 的评估顺序未根据 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)[intro.execution]/18 起得到保证,内容如下:
对于每个 function 调用
F
,对于在F
内发生的每个评估A
和在F
内不发生但在同一线程上评估并作为同一信号处理程序(如果有)的一部分的每个评估B
,A
在B
之前排序或B
在A
之前排序。 换句话说,function 次执行不会相互交错。
在 C++17 之前我们没有这样的保证。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.