cppreference的CopyAssignable与Boost的Assignable是否为同一概念?
cppreference CopyAssignable 与 Boost Assignable 并非同一事物
两者的核心要求和设计定位有明显区别:
cppreference 的 CopyAssignable
它是C++标准里更基础、更细分的概念,核心只要求类型支持左值的拷贝赋值操作——简单说就是对于类型T的左值对象t,能执行t = u(u可以是同类型的左值或能转换为T的右值),且操作后t是合法的左值。它不需要强制要求类型具备拷贝构造函数或swap(),还单独区分了针对右值赋值的MoveAssignable概念,是对赋值能力的最小化细分定义。Boost 的 Assignable
这是一套更实用、更“一站式”的定义,直接打包了容器元素常用的三类操作:- 拷贝构造函数(用于创建新元素)
- 拷贝赋值运算符(
operator=,对应赋值操作) swap()函数(用于高效交换元素)
它没有区分拷贝赋值和移动赋值的细节,而是给出了容器开发中更常用的完整可操作能力要求,比标准库的CopyAssignable约束更强。
简单总结:标准库的CopyAssignable是Boost Assignable的一个子集,后者在前者的基础上额外要求了拷贝构造和swap能力,两者不是同一概念。
内容的提问来源于stack exchange,提问作者John
相关产品推荐
相关产品推荐

