c语言进阶自定义类型详解(ModernC新特性)
c语言进阶自定义类型详解(ModernC新特性)另外使用inline修饰后,使用’=default’的特殊成员函数也可以像下图这样写:可以看到A是trivial type而B不是。这就是差别。使用说明符’=default’后该类就是trivial type可以在C 语言内部使用内存赋值,复制等操作,而B不是,因此B不行。所以使用说明符’=default’可以提升一定的效率。但是不是所有函数都可以附加说明符’=default’的。说明符’=default’。’=default’只能用在类的特殊成员函数上,并且用在构造函数上时构造函数不能有参数。如下图所示的例子:在上图所示的例子中,我们不需要指定构造函数A()的主体,因为通过附加说明符’=default’ 编译器将创建这个函数的默认实现。让编译器给我们实现默认构造在很多情况下比手工编写效率要高。但是如上图所示那样这个’= default’跟一个空的函数体 {} 有何区别呢? 我们在看下图
Modern C 新特性--- 显式指定Defaulted函数
C 当中,我们知道,如果一个类没有指定构造函数,析构函数,Copy构造函数或者Copy赋值操作符,那么C 编译器会自动给你生成一个。这些函数我们称为特殊成员函数。但是当我们指定了一个构造函数后,编译器就不会再为我们提供了。如下图所示的例子:
在C 11之前,我们可以添加一个无惨构造函数,如下图所示:
C 11之后我们可以在无参构造函数后面加上=default,来让编译器给我们提供默认构造函数。如下图所示:
在上图所示的例子中,我们不需要指定构造函数A()的主体,因为通过附加说明符’=default’ 编译器将创建这个函数的默认实现。
让编译器给我们实现默认构造在很多情况下比手工编写效率要高。但是如上图所示那样这个’= default’跟一个空的函数体 {} 有何区别呢? 我们在看下图中展示的例子:
运行上面的代码,得到如下输出:
可以看到A是trivial type而B不是。这就是差别。使用说明符’=default’后该类就是trivial type可以在C 语言内部使用内存赋值,复制等操作,而B不是,因此B不行。所以使用说明符’=default’可以提升一定的效率。但是不是所有函数都可以附加说明符’=default’的。说明符’=default’。’=default’只能用在类的特殊成员函数上,并且用在构造函数上时构造函数不能有参数。如下图所示的例子:
另外使用inline修饰后,使用’=default’的特殊成员函数也可以像下图这样写:
一般情况下,如果一个类需要默认构造函数,推荐使用附加‘=default’方式这样可以充分利用trivial type效率高的优势。
本文简单介绍了显式指定Defaulted函数的好处和使用方法,供大家参考。也欢迎转发分享给更多的人。谢谢!