C++能保证参数评价的原子性吗?

问题描述 投票:1回答:1
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++标准,函数参数的评估顺序是没有规定的。

换句话说,实际的评价顺序可能是。

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

我只是想知道

C++的标准是否保证 c() 间不会被调用 a()b()?

c++ c function arguments standards
1个回答
3
投票

我想从C++17开始就可以保证了。N4659(2017年3月后Kona工作草案C++17 DIS)[介绍.执行]18, 读作:

对于每次函数调用 F对于每次评价 A 其内 F 而每次评估 B 不在 F 但在同一线程上作为同一信号处理程序(如果有的话)的一部分进行评估,要么是 A 前的排序。BB 前的排序。A. 换句话说,函数的执行不会相互交错。

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

© www.soinside.com 2019 - 2024. All rights reserved.