繁体   English   中英

C++ 是否保证参数评估的原子性?

[英]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++ 标准指定。

换句话说,实际的评估顺序可能是:

  1. a(), b(), c()
  2. c(), a(), b()
  3. b(), a(), c()
  4. c(), b(), a()

我只是好奇:

C++ 标准是否保证c()永远不会在a()b()之间调用?

我猜它自 C++17.N4659(2017 年 3 月 Kona 工作草案/C++17 DIS)[intro.execution]/18 起得到保证,内容如下

对于每个 function 调用F ,对于在F内发生的每个评估A和在F内不发生但在同一线程上评估并作为同一信号处理程序(如果有)的一部分的每个评估BAB之前排序或BA之前排序。 换句话说,function 次执行不会相互交错。

在 C++17 之前我们没有这样的保证。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM