我正在尝试实现 C++0x 草案中的原子库。具体来说,我正在实现 §29.6/8,store 方法:
template <typename T>
void atomic<T>::store(T pDesired, memory_order pOrder = memory_order_seq_cst);
要求说明:
The order argument shall not be memory_order_consume, memory_order_acquire, nor memory_order_acq_rel.
如果是其中之一,我不确定该怎么办。我应该什么都不做、抛出异常、出现未定义的行为,还是做其他事情?
附言:“C++0X”看起来有点像死鱼 :3
最佳答案
随心所欲。没关系。
当 ISO 声明您“不得做某事”时,这样做是未定义的行为。如果用户这样做,他们就违反了与实现的契约(Contract),而实现在其权利范围内为所欲为。
你决定做什么完全取决于你。我会选择让您的实现“更好”的任何东西(在您看来,速度更快、可读性更强、符合最少惊讶原则等)。
我自己,我会追求可读性(因为我必须维护它),速度紧随其后。
关于c++ - 实现 atomic<T>::store,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3732395/