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

=default与=delete属函数声明还是定义?cppreference表述存疑

=default/=delete:是声明还是定义?

明确结论

  • =delete 是函数声明的一部分,且必须出现在函数的首次声明中。它的作用是禁用该函数的所有定义(包括编译器的隐式定义),本身不会生成任何函数体。
  • =default 的属性分场景:
    • 若在类内的首次声明中使用(比如 class A { A() = default; };),它同时承担声明和inline定义的角色——编译器会直接在此生成默认函数体。
    • 若在首次声明之后使用(比如类内仅写 A();,类外写 A::A() = default;),这是纯粹的函数定义,类内的语句才是函数声明,=default 是告知编译器生成默认实现。

关于cppreference表述的修正建议

你提到的那句“在首次声明后将函数声明为默认函数”表述不准确,更严谨的说法应为:在首次声明后将函数定义为默认函数。

原因很清晰:首次声明已经在类内完成,后续通过=default为函数提供实现的操作,属于定义环节而非声明——声明仅需一次,=default在这里是生成函数体的指令。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.02 08:15:32