C++11新初始化方法 使用{}初始化变量
列表初始化
在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,left和right被初始化为nullptr。如果成员变量的类型支持列表初始化,并且想要将它们初始化为默认值,也可以使用{}来替代赋值:
TreeNode() : val{}, height(0), left{}, right{} {}
注意height不能使用{}进行初始化,因为在其定义时未使用列表初始化。
C++11新初始化方法 使用{}初始化变量的更多相关文章
- js jquery 页面加载初始化方法
js jquery 页面加载初始化方法 一.js页面加载初始化方法 // 1.在body里面写初始化方法. <body onload='init()'> </body> < ...
- tensorflow中的参数初始化方法
1. 初始化为常量 tf中使用tf.constant_initializer(value)类生成一个初始值为常量value的tensor对象. constant_initializer类的构造函数定义 ...
- oc实例变量初始化方法
1 使用实例setter方法 默认初始化方法 + setName:xxx setAge:xxx 2 使用实例功能类方法,默认初始化方法 + setName:xxx age:xxx3 使用实例初始化方法 ...
- OC中实例变量可见度、setter、getter方法和自定义初始化方法
在对类和对象有一定了解之后,我们进一步探讨实例变量的可见度等相关知识 实例变量的可见度分为三种情况:public(共有),protected(受保护的,默认),private(私有的),具体的不同和特 ...
- C++类静态成员变量和const常量的初始化方法
C++类静态成员变量和const常量在定义类的时候就必须初始化,否则都会编译出错. 而具初始化方法为: C++类静态成员变量初始化方法 #include <iostream> #inclu ...
- C++11新特性——大括号初始化
C++11之前,C++主要有以下几种初始化方式: //小括号初始化 string str("hello"); //等号初始化 string str="hello" ...
- C++2.0新特性(二)——<一致性初始化、Initializer_list 、for循环、explicit>
一.一致性初始化(uniform initialization) 之前初始化时存在多个版本,让使用者使用时比较混乱,现在提供一种万用的初始化方法,就是使用大括号. 原理解析:当编译器看到大括号包起来的 ...
- Swift - 重写UIKit框架类的init初始化方法(以UITabBarController为例)
原来写了篇文章讲UITabBarController的用法,当时是从UIViewController跳转到UITabBarController页面,代码如下: 1 self.presentViewCo ...
- Java重写方法与初始化的隐患(转)
原文出处: Shawon 虽然文章标题是Java, 但几乎所有面向对象设计的语言都遵守这个初始化流程, 感谢廖祜秋liaohuqiu_秋百万指出, 之前忘记提这个了. 前言 drakeet写了个和Re ...
- 轻轻松松了解Java的初始化方法(含对象数组的小问题)
Java基础复习6-初始化 之前讲过了类的一些基础,想必大家都知道了类的定义 什么?你忘了? 下面给你一个例子快速复习 class AClass{ int a; boolean b; void get ...
随机推荐
- oeasy 教您玩转 linux 之 010302 火狐浏览器 firefox
我们来回顾一下 上一部分我们都讲了什么? oneko xeyes 这次看看这个火狐 火狐 看看当前版本 看看是否可以更新 如果需要更新就更新 firefox -v apt search f ...
- Nuxt.js 路由管理:useRouter 方法与路由中间件应用
title: Nuxt.js 路由管理:useRouter 方法与路由中间件应用 date: 2024/7/28 updated: 2024/7/28 author: cmdragon excerpt ...
- 【Java】再谈Springboot 策略模式
第一次使用策略模式是一年前的一个项目: https://www.cnblogs.com/mindzone/p/16046538.html 当时还不知道Spring支持集合类型的自动装配 在最近一个项目 ...
- 【Mybatis-Plus】06 代码生成器 CodeGenerator
导入生成器需要的依赖坐标: <dependency> <groupId>com.baomidou</groupId> <artifactId>mybat ...
- 美国小伙: "American Guy: Only communism can save America!"
视频地址: https://www.youtube.com/watch?v=Y_WQnXFh8ss 2024大选在即,又是拜登对阵特朗普的旧日重现.在角逐谁的对手反对者更多的畸形内耗中,有一个名为 M ...
- Ubuntu18.04环境下安装网络代理软件 proxychains
安装: 网络代理软件proxychains安装: sudo apt-get install proxychains 为保证使用 proxychains 时 sudo proxychains 时可以实现 ...
- 为什么被要求避免使用orcid
前段时间收到了最高机构的通知,要求不要使用orcid,并对之前使用的情况进行自查.得到这个通知,我其实还是蛮无感的,毕竟我一篇论文也没法过,而且也没有用过这个orcid,虽然我自己也是有这个的. 关于 ...
- Dolphinscheduler Docker部署全攻略
作者| 陈逸飞 Docker部署的目的是在容器中快速启动部署Apache Dolphinscheduler服务. 先决条件 docker-compose docker 使用容器单机部署Dolphins ...
- udp协议实现组播功能
/*************************************************************************************************** ...
- Go进程内存占用那些事(二)
0x01 最简单的Go程序 package main import ( "fmt" "time" ) func main() { fmt.Println(&qu ...