10

C++11 [atomics.types.generic]p7:

atomic如表 145 中指定的,应有与 的整数特化相对应的命名类型,以及atomic_bool与指定的 相对应的命名类型atomic<bool>。每个命名类型要么是对应特化的 typedef,要么是对应特化的基类。如果它是一个基类,它应该支持与相应的特化相同的成员函数。

(重点补充)

std::atomic_char对于所有其他类型,让not be 相同的理由是什么std::atomic<char>,依此类推?这能带来什么灵活性,为什么有用?乍一看,我不明白为什么不需要std::atomic<T>直接将这些类型定义为专业化。

请注意,提议的N2427<atomic>表示 typedef 完全针对专业化,而不可能针对基类。

4

1 回答 1

2

它可能在那里,因为有人已经使用std::atomic_*类型作为基类来实现原子,并且抱怨足够多/为这种方法提供了一个很好的论据。

MSVC中,建议使用这样的实现。

其中指出_

删除 atomic_.... 命名类型与 atomic 模板类的相应特化之间的定义基类关系。基类关系现在是依赖于实现的。此更改确保与 C 的兼容性。以前从基类继承的某些成员函数和运算符必须从命名类型提升到特化。

于 2013-05-08T13:43:25.423 回答