如果我用call_once
调用一个函数,如果它在完成执行之前抛出异常,那么once_flag
的值是多少?
答案 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}}的所有执行中:最多一次将是返回执行;如果有返回执行,则应该是最后一次执行;并且只有在返回执行时才会执行被动执行。