列表初始化

在C++11及以后的版本中,使用{}来初始化变量是一种新的初始化方法,称为列表初始化(List Initialization)。这种初始化方法可以用来初始化内置类型、自定义类型以及聚合类型。

示例代码:

/*AVL 树节点类*/
struct TreeNode{
int val{};
int height = 0;
TreeNode *left{};
TreeNode *right{};
TreeNode() = default;
TreeNode(int x) : val(x), height(0), left(nullptr), right(nullptr) {}
};

示例中,int val{}使用初始化列表来初始化val变量。这里{}表示空列表,它将val初始化为0,这是整型的默认值。这是等价于使用int val = 0;

使用列表初始化还有一些优点:

  • 更清晰的语法:使用{}明确表示变量的初始化过程。
  • 避免类型收窄:列表初始化不允许将值初始化为不匹配的类型,这有助于防止某些类型的错误。

下面是一些列表初始化的例子:

int a{};       // a 初始化为 0
int b{42}; // b 初始化为 42
double c{1.2}; // c 初始化为 1.2
TreeNode *left{}; // left 初始化为 nullptr

在构造函数初始化列表中{}也可以用来初始化成员变量,上述代码的构造函数中:

TreeNode(int x) : val(x), height(0), left(nullptr), right(nullptr) {}

这里,height被初始化为0,leftright被初始化为nullptr。如果成员变量的类型支持列表初始化,并且想要将它们初始化为默认值,也可以使用{}来替代赋值:

TreeNode() : val{}, height(0), left{}, right{} {}

注意height不能使用{}进行初始化,因为在其定义时未使用列表初始化。

C++11新初始化方法 使用{}初始化变量的更多相关文章

  1. js jquery 页面加载初始化方法

    js jquery 页面加载初始化方法 一.js页面加载初始化方法 // 1.在body里面写初始化方法. <body onload='init()'> </body> < ...

  2. tensorflow中的参数初始化方法

    1. 初始化为常量 tf中使用tf.constant_initializer(value)类生成一个初始值为常量value的tensor对象. constant_initializer类的构造函数定义 ...

  3. oc实例变量初始化方法

    1 使用实例setter方法 默认初始化方法 + setName:xxx setAge:xxx 2 使用实例功能类方法,默认初始化方法 + setName:xxx age:xxx3 使用实例初始化方法 ...

  4. OC中实例变量可见度、setter、getter方法和自定义初始化方法

    在对类和对象有一定了解之后,我们进一步探讨实例变量的可见度等相关知识 实例变量的可见度分为三种情况:public(共有),protected(受保护的,默认),private(私有的),具体的不同和特 ...

  5. C++类静态成员变量和const常量的初始化方法

    C++类静态成员变量和const常量在定义类的时候就必须初始化,否则都会编译出错. 而具初始化方法为: C++类静态成员变量初始化方法 #include <iostream> #inclu ...

  6. C++11新特性——大括号初始化

    C++11之前,C++主要有以下几种初始化方式: //小括号初始化 string str("hello"); //等号初始化 string str="hello" ...

  7. C++2.0新特性(二)——<一致性初始化、Initializer_list 、for循环、explicit>

    一.一致性初始化(uniform initialization) 之前初始化时存在多个版本,让使用者使用时比较混乱,现在提供一种万用的初始化方法,就是使用大括号. 原理解析:当编译器看到大括号包起来的 ...

  8. Swift - 重写UIKit框架类的init初始化方法(以UITabBarController为例)

    原来写了篇文章讲UITabBarController的用法,当时是从UIViewController跳转到UITabBarController页面,代码如下: 1 self.presentViewCo ...

  9. Java重写方法与初始化的隐患(转)

    原文出处: Shawon 虽然文章标题是Java, 但几乎所有面向对象设计的语言都遵守这个初始化流程, 感谢廖祜秋liaohuqiu_秋百万指出, 之前忘记提这个了. 前言 drakeet写了个和Re ...

  10. 轻轻松松了解Java的初始化方法(含对象数组的小问题)

    Java基础复习6-初始化 之前讲过了类的一些基础,想必大家都知道了类的定义 什么?你忘了? 下面给你一个例子快速复习 class AClass{ int a; boolean b; void get ...

随机推荐

  1. 开启GitLab的邮件通知功能以及一些外观配置

    前言 维护GitLab的同事离职了 刚好又有新实习生需要申请账号 只能我来出手了 其实之前安装了 GitLab 之后一直还是用得比较粗糙的 属于是勉强能用的水平,有些配置都还没改好 这次把邮件功能.域 ...

  2. oeasy教您玩转vim - 20 - 显示标尺

    显示标尺 回忆上节课内容 定义标记 a ma 删除标记 a :delm a 跳转到标记 a 'a `a 跳到 a 对应的行和列 'a 跳到 a 对应的行 查看所有标记 :marks 各种标记类型 '' ...

  3. [oeasy]python0011 - python虚拟机的本质_cpu架构_二进制字节码_汇编语言

    ​ 程序本质 回忆上次内容 我们把python源文件 词法分析 得到 词流(token stream) 语法分析 得到 抽象语法树(Abstract Syntax Tree) 编译 得到 字节码 (b ...

  4. Vue 给mapState中定义的属性赋值报错的解决方案

    Vue 给mapState中定义的属性赋值报错的解决方案 by:授客 QQ:1033553122 1.   实践环境 Vue 2.9.6 2.   问题描述 <script> import ...

  5. python selenium元素定位

    1.ID元素定位基于元素属性中的id的值来进行定位,id是一个标签的唯一属性值可以通过id属性来唯一定位一个元素,是首选的元素定位方式,动态ID不做考虑.driver .find_element_by ...

  6. Selenium 8个定位元素

    selenium 8个定位元素为:id.name.xpath.link_text.class_name.tag_name.css_selector.partial_link_text 1.id元素 浏 ...

  7. JDBC详解学习笔记

    JDBC简介 架构时--没有什么是加一层解决不了的,如果有,就再加一层. 如tomcat集群上面的Nginx,Nginx集群上面的LVS. JDBC是数据库驱动的接口规范,是SUN公司未来简化开发人员 ...

  8. 如何将 Vim 剪贴板里面的东西粘贴到 Vim 之外的地方? (Ubuntu18.04系统亲测)

    主要参考内容: https://www.zhihu.com/question/19863631 在vim中剪贴中的内容是难以在vim之外使用的,那么怎么修改这个问题呢? =============== ...

  9. java中sleep与 yield 区别

    1.背景 在多线程的使用中你会看到这个两个方法sleep()与yield()这两方法有什么作用呢? 请看下面案例演示 2.测试 package com.ldp.demo01; import com.c ...

  10. 如何让您的 .NET应用程序更智能-- 请参加 8.20 的 .NET Conf -- Focus on AI

    Microsoft 将于 2024 年 8 月 20 日举办免费的 .NET Conf: Focus on AI.该虚拟活动为开发人员提供了如何集成 .NET 和 AI 以增强应用程序开发和用户体验的 ...