C++11之列表初始化
1. 在C++98中,标准允许使用花括号{}来对数组元素进行统一的集合(列表)初始化操作,如:int buf[] = {0};int arr[] = {1,2,3,4,5,6,7,8}; 可是对于自定义的类型,却是无法这样去初始化的,比如STL标准模板库中容器,使用的频率非常之高,如vector,若要初始化其内容,则需要每次进行push_back 或使用迭代器去初始化,这是极其不便的。C++11 中,可以”列表初始化“方式来快速的初始化内置类型或STL中容器。
2.集合(列表)的初始化方式已经成为C++语言的一个基本功能,列表初始化的方式对:内置类型(int、float、double、char等)、数组、自定义的类、函数参数列表、STL标准模板库等都是有效的。
int main(int argc,char **argv)
{
int arr[] = {1,2,3,4,5,6,7,8,9,10}; //c++98编译通过 c++11编译通过
int buf[]{11,22,33,44,55,66,77}; //c++98编译失败
vector<int> _vec= {10,20,30,40,50,60}; //c++98编译失败 //c++98编译失败
map<int,std::string> _map{{1,"lxg"},{2,"the answer"},{3,"hello world."}};
return 0;
}
3. 初始化列表可以在花括号“{}”之前使用等号=,其效果与不带等号的初始化相同。如:`int a{10}` 和 `int a = {10}`。 所以,自动化变量和全局变量的初始化在C++11中被丰富了。比如可以使用以下几种方式来完成初始化操作: ① 等号“=” 加上赋值表达式(assignment_expression)。如:int a = 1+2. ② 等号“=”加上花括号{}的初始化列表。如:int b = {1+3}. ③ 圆括号式的表达式列表。如:int a(1+2). ④ 花括号{}的初始化列表。如:int a{1+3}. ③④两种方式也可以 用new操作符中。比如:`int *p = new int(2); char *c = new char{'g'};`
4. 正如2.中所描述,列表初始化方式同样也适用于自定义的类中。因为标准模板库中容器对初始化类别的支持源自于 <initializer_list> 头文件中<initializer_list 类模板的支持。因此,只需要在应用中#include <initializer_list> 头文件,同时声明一个以 initializer_list<T> 模板类为参数的构造函数。
————————————————
版权声明:本文为CSDN博主「此处不归牛顿管」的原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.csdn.net/lixiaogang_theanswer/article/details/82563961
C++11之列表初始化的更多相关文章
- C++11 列表初始化
在我们实际编程中,我们经常会碰到变量初始化的问题,对于不同的变量初始化的手段多种多样,比如说对于一个数组我们可以使用 int arr[] = {1,2,3}的方式初始化,又比如对于一个简单的结构体: ...
- c++11——列表初始化
1. 使用列表初始化 在c++98/03中,对象的初始化方法有很多种,例如 int ar[3] = {1,2,3}; int arr[] = {1,2,3}; //普通数组 struct A{ int ...
- C++11常用特性介绍——列表初始化
一.列表初始化 1)C++11以前,定义初始化的几种不同形式,如下: int data = 0; //赋值初始化 int data = {0}; //花括号初始化 int data(0); / ...
- 【ZZ】C++11之统一初始化语法 | 桃子的博客志
C++11之统一初始化语法 | 桃子的博客志 https://taozj.net/201710/list-initialize.html 在当前新标准C++11的语法看来,变量合法的初始化器有如下形式 ...
- 第8课 列表初始化(3)_防止类型收窄、explicit关键字
1. 防止类型收窄 (1)类型收窄:指的是导致数据内容发生变化或者精度丢失的隐式类型转换. (2)类型收窄的几种情况: ①从浮点数隐式转换为整型数,如int i=2.2; ②从高精度浮点数隐式转换为低 ...
- initializer_list、初始化列表、列表初始化
什么是列表初始化 使用一个花括号来初始化变量,表现形式如下: std::vector<int>a{1,2,3,4,5}; 或者 std::vector<int>a = {1,2 ...
- 列表初始化 分析initializer_list<T>的实现
列表初始化(1)_统一初始化 1. 统一初始化(Uniform Initialization) (1)在C++11之前,很多程序员特别是初学者对如何初始化一个变量或对象的问题很容易出现困惑.因为可以用 ...
- C++统一初始化语法(列表初始化)
引言 要是世上不曾存在C++14和C++17该有多好!constexpr是好东西,但是让编译器开发者痛不欲生:新标准库的确好用,但改语法细节未必是明智之举,尤其是3年一次的频繁改动.C++带了太多历史 ...
- 大括号之谜:C++的列表初始化语法解析
有朋友在使用std::array时发现一个奇怪的问题:当元素类型是复合类型时,编译通不过. struct S { int x; int y; }; int main() { int a1[3]{1, ...
随机推荐
- webpack打包工具简单案例
目录结构: 入口文件:main.js 把项目所有的依赖文件都放进main.js //1.使用CommonJs的模块化规范 const {add, mul} = require('./mathUtil. ...
- Python3解leetcode Count Primes
问题描述: Count the number of prime numbers less than a non-negative number, n. Example: Input: 10 Outpu ...
- LOJ 6433 「PKUSC2018」最大前缀和——状压DP
题目:https://loj.ac/problem/6433 想到一个方案中没有被选的后缀满足 “该后缀的任一前缀和 <=0 ”. 于是令 dp[ S ] 表示选了点集 S ,满足任一前缀和 & ...
- sonarqube6.7.1使用
1.插件安装 方法1.登入sonarqube-web安装 admin/admin 配置--应用市场--全部 英文片:administration--configuration--marketplace ...
- python中socket理论
Socket是应用层与TCP/IP协议族通信的中间软件抽象层,它是一组接口.在设计模式中,Socket其实就是一个门面模式,它把复杂的TCP/IP协议族隐藏在Socket接口后面,对用户来说,一组简单 ...
- Linux编程 多进程,多线程求解PI(圆周率)
题目: 链接 多进程: #include <unistd.h> #include <stdio.h> #include <stdlib.h> #define n 1 ...
- javascript中call(),apply()用法
//上下文模式:根据用户传递的参数产生不同的结果 //实现方式:call/apply:这两个都是定义在Function.prototype.call——>目的:任何函数都可以访问到call/ ...
- HTMLtr 标签的 valign 属性
valign 属性规定表格行中内容的垂直对齐方式. <table width="100%" border="1"> <tr valign=&q ...
- UVA1608_Non-boring sequences
Non-boring sequences 大致题意: 给你一个字符串,问你他的任一子串是否都包含一个唯一的字符 思路: 看似简单,实际一丁点思路都没有 后面看汝佳的讲解都看了好长时间 大概思路就是,先 ...
- Cocos2d 之FlyBird开发---MainMenu类
| 版权声明:本文为博主原创文章,未经博主允许不得转载. MainMenu类主要实现的是游戏主界面的布局,它相当于一个港口,有开向各处的航道,而游戏中的MainMenu则是有跳转到各个场景的一个集 ...