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

被删除的构造函数是否仍被视为平凡构造函数?

被删除的构造函数是否仍被视为平凡构造函数?

先来看你给出的这个结构体定义:

#include <type_traits>

struct S {
    S(const S &) = delete;
    S(S &&) = delete;
    S & operator=(const S &) = delete;
    S & operator=(S &&) = delete;
};

要搞清楚这个问题,得先抠C++标准里对平凡可复制类的核心定义:

一个平凡可复制类是满足以下所有条件的类:

  • 拥有至少一个合格的复制构造函数、移动构造函数、复制赋值运算符或移动赋值运算符
  • 所有合格的复制构造函数都是平凡的
  • 所有合格的移动构造函数都是平凡的
  • 所有合格的复制赋值运算符都是平凡的
  • 所有合格的移动赋值运算符都是平凡的
  • 析构函数是平凡且合格的

这里得先掰明白两个关键细节:

  • 被删除的函数属于**不合格(ineligible)**的范畴——标准里说的「合格函数」,特指那些未被删除、可访问,并且能通过重载决议的函数。你显式用delete标记的这些构造/赋值运算符,直接就被踢出了「合格函数」的圈子。
  • 平凡构造函数的判定,只针对合格的函数。而且平凡构造函数要求是编译器默认生成的,还得满足没有任何非平凡操作(比如没有用户自定义逻辑、成员都是平凡类型等)——被删除的函数连实现都不存在,更谈不上是「平凡实现」了。

回到你定义的结构体S:它所有的复制/移动构造、赋值运算符都被删除了,连一个合格的对应函数都没有,首先就不满足平凡可复制类的入门条件。而单独说这些被删除的构造函数,它们根本没资格参与平凡性的判定,自然不能被视为平凡构造函数。

内容来源于stack exchange

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.04.08 13:38:08