call_once的行为,而例外

Behaviour of call_once while exceptions

本文关键字:once call      更新时间:2023-10-16

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

once_flag状态不会被修改,因此下一次使用相同once_flag调用call_once将调用可调用对象。

来自 [thread.once.callonce]/2(着重号已添加(

效果:不调用其funccall_­once执行是被动执行。调用其funccall_­once的执行是活动执行。活动执行应调用INVOKE(​std​::​forward<Callable>(func), std​::​forward<Args>(args)...)如果对 func 的此类调用引发异常,则执行是异常的,否则将返回异常执行应将异常传播给call_­once的调用方。在任何给定once_­flag的所有call_­once处决中:最多一次是返回处决;如果有返回执行,则应为最后一次活动执行;并且只有在有返回执行时才有被动执行。