In 8.4.2 Explicitly-defaulted functions [dcl.fct.def.default]
标准的,
显式默认函数和隐式声明函数是
统称为默认函数,并且实现应
为它们提供隐式定义(12.1 12.4,12.8),这可能
意味着将它们定义为已删除。一个特殊的成员函数是
用户提供(如果是用户声明且未明确默认)或
在其第一次声明时被删除。用户提供的显式默认值
函数(即在第一次声明后显式默认)是
在明确默认的位置定义;如果这样一个
函数被隐式定义为已删除,程序格式错误。[ 注意:在第一次声明后将函数声明为默认函数
可以提供高效的执行和简洁的定义,同时启用
与不断发展的代码库的稳定二进制接口。-尾注]
最后的注释是什么意思?据我所知,在第一次声明后将函数声明为默认函数将使该函数由用户提供,从而使该函数变得不平凡,从而使该类型具有不平凡的默认构造函数或使该类型变得不平凡-可复制,当然也使类型变得非平凡且非 POD,同时仍然具有提供函数实际定义的实现。但我不明白这如何导致“provide efficient execution and concise definition while enabling a stable binary interface to an evolving code base
“。欢迎任何想法,高度赞赏现实世界的例子。谢谢。
此类类型的示例:
struct A {
A();
};
A::A() = default;
假设你有
// A.h
struct A {
A();
};
and
// A.cc
A::A() { }
你可以将其更改为
// A.cc
A::A() = default;
不强制代码使用A.h
重新编译。
对于默认构造函数来说,这没有多大意义。= default
占用的字符数多于{ }
。但请考虑其他构造函数类型:如果不再需要显式提及每个字段,则复制或移动构造函数可能会变得更短,并且根据您正在处理的编译器和类型,默认的复制/移动构造函数甚至可能会执行更好,例如,如果编译器只能检测到memcpy
当您使用时调用就足够了= default
syntax.
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)