美文网首页C++11新特性程序员
C++11新特性(17)- 使用=default生成默认构造函数

C++11新特性(17)- 使用=default生成默认构造函数

作者: 面向对象思考 | 来源:发表于2018-07-01 11:14 被阅读1次

从C++基本知识说起

先看下面代码:

struct Point{

  int x;

  int y;

};

代码内容很简单,定义了一个包含成员x,y的类Point。在需要的地方可以使用这个类:

Point pt;

pt.x = 10;

pt.y = 10;

虽然我们并没用定义Point类的构造函数,我们依然可以定义Point类的pt对象并使用它,其原因是编译器会自动生成一个缺省的的构造函数。其效果大致相当于:

struct Point{

  Point(){}

  int x;

  int y;

};

一切看起来是那么的美好,但是一旦因为其他原因添加了其他有参数的构造函数,编译器就不再生成缺省的构造函数了。

C++11的解决方案

C++11允许我们使用=default来要求编译器生成一个默认构造函数:

struct Point{    

  Point()=default;

  Point(int _x, int _y)

    :x(_x),y(_y){}

  int x = 0;

  int y = 0;

};

这样,我们就可以继续我们的美好生活了。

如果是自己编写的无参构造函数的话,就需要指定成员的构造方式。默认构造函数会对数据成员进行默认初始化,所以就不需要另外指定了。这样可以省去一些麻烦。

由于整数是内置类型,而整数成员的默认初始化是不初始化,所以本例中的x,y还是需要类内初始化。这时另一个话题。

作者观点

C++的语法很严密,就好像经过理论推演一样。


觉得本文有帮助?请分享给更多人。

扫码关注微信公众号【面向对象思考】,轻松学习每一天!

面向对象设计,面向对象编程,面向对象思考!

相关文章

  • C++11新特性(17)- 使用=default生成默认构造函数

    从C++基本知识说起 先看下面代码: struct Point{ int x; int y; }; 代码内容很...

  • C++11——类

    使用 = default 生成默认构造函数 在新标准下,如果我们想要一个默认构造函数,我们可以在参数列表的后面添加...

  • Ceph读写锁实现

    src/common/RWLock.h RWLock使用了C++11新特性Deleted函数,禁用其拷贝构造函数与...

  • C++11中std::move、std::forward、左右值

    C++11中std::move、std::forward、左右值引用、移动构造函数的测试 关于C++11新特性之s...

  • [C++11阅读]移动语义和完美转发(上)

    移动语义是C++11中提升代码执行性能最重要的新特性,也是最复杂的特性之一。 移动构造函数 提出移动构造函数的动机...

  • Flutter 6种构造函数详解

    Flutter有生成构造函数、默认构造函数、命名构造函数、重定向构造函数、常量构造函数、工厂构造函数 一.生成构造...

  • Flutter学习之Dart语言基础(构造函数)

    最常见的构造函数形式,即生成构造函数,创建一个类的新实例: 使用语法糖的时候可以这样定义: 默认构造函数 如果未声...

  • GeekBand C++面向对象高级编程(上) Second W

    C++ Big Three 首先是默认构造函数(default constructor) 的概念,默认构造函数是没...

  • =default

    使用 =default 来获得默认的构造函数、拷贝控制函数、析构函数 特别的: 这样我们就可以不用显式的构造,而直...

  • 构造函数

    构造函数 在 class 中,可以不写默认构造函数,编译器会默认生成。 在构造函数中,尽量使用初始化列,但是会有陷...

网友评论

    本文标题:C++11新特性(17)- 使用=default生成默认构造函数

    本文链接:https://www.haomeiwen.com/subject/vkycuftx.html