当前位置:首页 > 科技  > 软件

C++14中的成员初始值设定项与聚合功能详解

来源: 责编: 时间:2023-11-20 08:58:13 441观看
导读一、引言C++14作为C++语言的一个重要版本,引入了许多新的特性和功能,其中包括成员初始值设定项(Member Initializer List)和聚合(Aggregate)。这些特性在提高代码的可读性和灵活性方面起到了重要作用。本文将详细介绍这两个

一、引言

C++14作为C++语言的一个重要版本,引入了许多新的特性和功能,其中包括成员初始值设定项(Member Initializer List)和聚合(Aggregate)。这些特性在提高代码的可读性和灵活性方面起到了重要作用。本文将详细介绍这两个特性及其在C++14中的应用。6de28资讯网——每日最新资讯28at.com

6de28资讯网——每日最新资讯28at.com

6de28资讯网——每日最新资讯28at.com

二、成员初始值设定项(Member Initializer List)

1.成员初始值设定项的定义

成员初始值设定项是一种在构造函数初始化列表中指定成员变量初始值的方法。通过在构造函数初始化列表中列出成员变量及其初始值,可以确保成员变量在构造函数的主体部分被初始化。6de28资讯网——每日最新资讯28at.com

2.成员初始值设定项的语法

成员初始值设定项的语法如下:6de28资讯网——每日最新资讯28at.com

class MyClass {  public:      int a;      double b;      MyClass(int x, double y) : a(x), b(y) {} // 成员初始值设定项  };

6de28资讯网——每日最新资讯28at.com

在上述示例中,MyClass有两个成员变量a和b,它们的初始值通过构造函数初始化列表进行设定。这种方式的初始化可以确保成员变量在构造函数主体部分执行之前被正确初始化。6de28资讯网——每日最新资讯28at.com

3.成员初始值设定项的注意事项

  • 成员初始值设定项必须按照成员变量在类中声明的顺序进行初始化。
  • 如果成员变量是内置类型,则不需要使用成员初始值设定项进行初始化。
  • 如果成员变量是常量或引用类型,则不能在成员初始值设定项中进行初始化。

三、聚合(Aggregate)

1.聚合的定义

聚合是一种特殊的类类型,它允许将多个变量组合成一个单一的实体。聚合的特点是它们没有构造函数、析构函数或任何虚函数。聚合只能包含其他聚合类型的成员,并且不能包含类类型的成员。6de28资讯网——每日最新资讯28at.com

2.聚合的语法

聚合的语法如下:6de28资讯网——每日最新资讯28at.com

struct MyAggregate {      int a;      double b;  };

6de28资讯网——每日最新资讯28at.com

在上述示例中,MyAggregate是一个聚合类型,它包含了两个整型变量a和b。由于MyAggregate是一个聚合类型,因此它不能包含构造函数、析构函数或虚函数。6de28资讯网——每日最新资讯28at.com

3.聚合的注意事项

  • 聚合不能包含类类型的成员,只能包含其他聚合类型的成员。
  • 聚合不能包含构造函数、析构函数或虚函数。如果聚合类型需要析构函数或虚函数,则必须声明一个类类型的成员。

四、代码示例与讲解(示例代码:使用成员初始值设定项和聚合)

下面是一个使用成员初始值设定项和聚合的示例代码:6de28资讯网——每日最新资讯28at.com

#include <iostream>  using namespace std;    // 定义一个聚合类型 MyAggregate  struct MyAggregate {      int a;      double b;  };    // 定义一个类 MyClass,该类包含一个聚合类型的成员和一个使用成员初始值设定项初始化的成员变量。  class MyClass {  public:      MyAggregate agg = {10, 20.5}; // 定义一个聚合类型的成员变量 agg,并使用成员初始值设定项初始化它的成员变量 a 和 b。      int c = 30; // 定义一个整数类型的成员变量 c,并使用成员初始值设定项将其初始化为30。  };    int main() {      MyClass obj; // 创建一个 MyClass 类型的对象 obj。      cout << "agg.a: " << obj.agg.a << endl; // 输出 obj 的聚合类型成员变量 agg 的成员变量 a 的值。      cout << "agg.b: " << obj.agg.b << endl; // 输出 obj 的聚合类型成员变量 agg 的成员变量 b 的值。      cout << "c: " << obj.c << endl; // 输出 obj 的整数类型成员变量 c 的值。      return 0;  }

6de28资讯网——每日最新资讯28at.com

以下是代码的讲解:6de28资讯网——每日最新资讯28at.com

MyAggregate agg; 定义了一个名为 agg 的 MyAggregate 类型的成员变量。由于 MyAggregate 是聚合类型,所以它不能包含构造函数,我们需要使用成员初始值设定项来初始化它的成员变量。6de28资讯网——每日最新资讯28at.com

MyAggregate agg = {10, 20.5}; 这里我们使用了成员初始值设定项来初始化 agg 的成员变量 a 和 b。我们可以通过在 = 后面直接跟上初始化列表来给聚合类型的成员变量进行初始化。初始化列表中的顺序必须与聚合类型成员变量在定义时的顺序相同。6de28资讯网——每日最新资讯28at.com

int c = 30; 这里我们定义了一个名为 c 的整数类型成员变量,并使用成员初始值设定项将其初始化为30。6de28资讯网——每日最新资讯28at.com

五、结论

通过使用成员初始值设定项和聚合功能,我们可以更加灵活地管理类中的成员变量。成员初始值设定项允许我们在构造函数初始化列表中指定成员变量的初始值,而聚合功能则允许我们将多个变量组合成一个单一的实体。这些特性使得代码更加简洁、可读性更强且更加灵活。6de28资讯网——每日最新资讯28at.com

本文链接:http://www.28at.com/showinfo-26-31014-0.htmlC++14中的成员初始值设定项与聚合功能详解

声明:本网页内容旨在传播知识,若有侵权等问题请及时与本网联系,我们将在第一时间删除处理。邮件:2376512515@qq.com

上一篇: C++ 20类型转换指南:使用场景与优秀实践

下一篇: 快速创建高效REST API的十个要点解析

标签:
  • 热门焦点
  • Redmi Buds 4开箱简评:才199还有降噪 可以无脑入

    在上个月举办的Redmi Note11T Pro系列新机发布会上,除了两款手机新品之外,Redmi还带来了两款TWS真无线蓝牙耳机产品,Redmi Buds 4和Redmi Buds 4 Pro,此前我们在Redmi Note11T
  • 如何通过Python线程池实现异步编程?

    线程池的概念和基本原理线程池是一种并发处理机制,它可以在程序启动时创建一组线程,并将它们置于等待任务的状态。当任务到达时,线程池中的某个线程会被唤醒并执行任务,执行完任
  • 如何使用JavaScript创建一只图像放大镜?

    译者 | 布加迪审校 | 重楼如果您曾经浏览过购物网站,可能遇到过图像放大功能。它可以让您放大图像的特定区域,以便浏览。结合这个小小的重要功能可以大大改善您网站的用户体验
  • 一文掌握 Golang 模糊测试(Fuzz Testing)

    模糊测试(Fuzz Testing)模糊测试(Fuzz Testing)是通过向目标系统提供非预期的输入并监视异常结果来发现软件漏洞的方法。可以用来发现应用程序、操作系统和网络协议等中的漏洞或
  • 雅柏威士忌多款单品价格大跌,泥煤顶流也不香了?

    来源 | 烈酒商业观察编 | 肖海林今年以来,威士忌市场开始出现了降温迹象,越来越多不断暴涨的网红威士忌也开始悄然回归市场理性。近日,LVMH集团旗下苏格兰威士忌品牌雅柏(Ardbeg
  • 共享单车的故事讲到哪了?

    来源丨海克财经与共享充电宝相差不多,共享单车已很久没有被国内热点新闻关照到了。除了一再涨价和用户直呼用不起了。近日多家媒体再发报道称,成都、天津、郑州等地多个共享单
  • 本地生活这块肥肉,拼多多也想吃一口

    出品/壹览商业 作者/李彦编辑/木鱼拼多多也看上本地生活这块蛋糕了。近期,拼多多在App首页&ldquo;充值中心&rdquo;入口上线了本机生活界面。壹览商业发现,该界面目前主要
  • 小米汽车电池信息疑似曝光:容量101kWh,支持800V高压快充

    7月14日消息,今日一名博主在社交媒体发布了一张疑似小米汽车电池信息的照片,显示该电池包正是宁德时代麒麟电池,容量为101kWh,电压为726.7V,可以预测小
  • Counterpoint :OPPO双旗舰战略全面落地 高端产品销量增长22%

    2023年6月30日,全球行业分析机构Counterpoint Research发布的《中国智能手机高端市场白皮书》显示,中国智能手机品牌正在寻求高质量发展,中国高端智能
Top