You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

类要成为TriviallyCopyable,是否所有特殊成员函数都必须平凡?

平凡可复制类(TriviallyCopyable)的特殊成员函数要求

答案很明确:是的,要成为平凡可复制类,所有可用的特殊成员函数(拷贝构造、移动构造、拷贝赋值、移动赋值)都必须是平凡的,同时还得有一个未删除的平凡析构函数。

针对你提到的场景——类拥有平凡的拷贝构造函数,但存在非平凡的移动赋值运算符:
这种类不属于平凡可复制类。因为判定规则明确要求,每一个可用的(即未被删除的)移动赋值运算符都必须是平凡的。只要有一个可用的特殊成员函数不满足平凡性,整个类就不符合要求,不管其他成员函数是否达标。

你提到的“能用memcpy构造或赋值就符合要求”确实是平凡可复制类的核心语义,但C++标准是通过特殊成员函数的属性来定义这个概念的。如果类存在非平凡的移动赋值,说明这个赋值操作无法用memcpy替代(比如涉及动态内存管理、自定义逻辑),本质上违背了平凡可复制的语义,自然也不满足标准的判定条件。

再重申一遍平凡可复制类的完整判定条件:

  • 至少拥有一个可用的拷贝构造、移动构造、拷贝赋值或移动赋值运算符;
  • 所有可用的拷贝构造函数都是平凡的;
  • 所有可用的移动构造函数都是平凡的;
  • 所有可用的拷贝赋值运算符都是平凡的;
  • 所有可用的移动赋值运算符都是平凡的;
  • 拥有未删除的平凡析构函数。

内容的提问来源于stack exchange,提问作者einpoklum

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.08 22:30:11