异常时call_once的行为

时间:2018-03-19 05:11:12

标签: c++ c++11

如果我用call_once调用一个函数,如果它在完成执行之前抛出异常,那么once_flag的值是多少?

1 个答案:

答案 0 :(得分:4)

once_flag状态未被修改,因此下一次使用相同call_once调用once_flag将调用callable。

来自[thread.once.callonce]/2(强调添加)

  

效果:执行call_­once而不调用其func被动执行。执行call_­once调用其func活动执行。主动执行应调用INVOKE(​std​::​forward<Callable>(func), std​::​forward<Args>(args)...)如果对func的此类调用引发异常,则执行例外,否则返回异常执行应传播call_­once来电者的例外情况。 对于任何给定call_­once的{​​{1}}的所有执行中:最多一次将是返回执行;如果有返回执行,则应该是最后一次执行;并且只有在返回执行时才会执行被动执行。