列表初始化

在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. oeasy 教您玩转 linux 之 010302 火狐浏览器 firefox

    我们来回顾一下 上一部分我们都讲了什么? oneko xeyes 这次看看这个火狐 火狐 看看当前版本 看看是否可以更新 如果需要更新就更新    firefox -v    apt search f ...

  2. Nuxt.js 路由管理:useRouter 方法与路由中间件应用

    title: Nuxt.js 路由管理:useRouter 方法与路由中间件应用 date: 2024/7/28 updated: 2024/7/28 author: cmdragon excerpt ...

  3. 【Java】再谈Springboot 策略模式

    第一次使用策略模式是一年前的一个项目: https://www.cnblogs.com/mindzone/p/16046538.html 当时还不知道Spring支持集合类型的自动装配 在最近一个项目 ...

  4. 【Mybatis-Plus】06 代码生成器 CodeGenerator

    导入生成器需要的依赖坐标: <dependency> <groupId>com.baomidou</groupId> <artifactId>mybat ...

  5. 美国小伙: "American Guy: Only communism can save America!"

    视频地址: https://www.youtube.com/watch?v=Y_WQnXFh8ss 2024大选在即,又是拜登对阵特朗普的旧日重现.在角逐谁的对手反对者更多的畸形内耗中,有一个名为 M ...

  6. Ubuntu18.04环境下安装网络代理软件 proxychains

    安装: 网络代理软件proxychains安装: sudo apt-get install proxychains 为保证使用 proxychains 时 sudo proxychains 时可以实现 ...

  7. 为什么被要求避免使用orcid

    前段时间收到了最高机构的通知,要求不要使用orcid,并对之前使用的情况进行自查.得到这个通知,我其实还是蛮无感的,毕竟我一篇论文也没法过,而且也没有用过这个orcid,虽然我自己也是有这个的. 关于 ...

  8. Dolphinscheduler Docker部署全攻略

    作者| 陈逸飞 Docker部署的目的是在容器中快速启动部署Apache Dolphinscheduler服务. 先决条件 docker-compose docker 使用容器单机部署Dolphins ...

  9. udp协议实现组播功能

    /*************************************************************************************************** ...

  10. Go进程内存占用那些事(二)

    0x01 最简单的Go程序 package main import ( "fmt" "time" ) func main() { fmt.Println(&qu ...