=default与=delete属函数声明还是定义?cppreference表述存疑
=default/=delete:是声明还是定义? 明确结论
=delete是函数声明的一部分,且必须出现在函数的首次声明中。它的作用是禁用该函数的所有定义(包括编译器的隐式定义),本身不会生成任何函数体。=default的属性分场景:- 若在类内的首次声明中使用(比如
class A { A() = default; };),它同时承担声明和inline定义的角色——编译器会直接在此生成默认函数体。 - 若在首次声明之后使用(比如类内仅写
A();,类外写A::A() = default;),这是纯粹的函数定义,类内的语句才是函数声明,=default是告知编译器生成默认实现。
- 若在类内的首次声明中使用(比如
关于cppreference表述的修正建议
你提到的那句“在首次声明后将函数声明为默认函数”表述不准确,更严谨的说法应为:在首次声明后将函数定义为默认函数。
原因很清晰:首次声明已经在类内完成,后续通过=default为函数提供实现的操作,属于定义环节而非声明——声明仅需一次,=default在这里是生成函数体的指令。
内容的提问来源于stack exchange,提问作者Kevin eyeson
相关产品推荐
相关产品推荐

