C++11 初始化
C++11 初始化
统一初始化语法
C++11新添加初始化列表 std::initializer_list<>类型,可以通过{}语法来构造初始化列表 。初始化列表是常数;一旦被创建,其成员均不能被改变,成员中的数据也不能够被变动。函数能够使用初始化列表作为参数。
在引入C++ 11之前,有各种不同的初始化语法。在C++ 11中,仍可以使用这些初始化语法,但也可以选择使用新引入的统一的初始化语法。统一的初始化语法用一对大括号{}表示。
std::vector<string> v1 = {"hello", "world", "welcome"};
std::vector<int> v2 = {0, 3, 8, 1, 4};
// 注: vs2012 不支持统一初始化方式{}
类内成员初始化
#define _CRT_SECURE_NO_WARNINGS #include <iostream>
#include <string>
#include <vector>
#include <map> class Mem
{
public:
Mem(int i, int j): m(i), n(j) // 初始化列表给m初始化, 可以给const变量赋初值, 以及引用变量赋初值
{
// m = i; 错误,不能给const变量赋值
// n = j; 错误,不能给引用变量赋值
}
int getM()
{
std::cout << "m: " << m << std::endl;
}
const int m;
int &n;
}; void mytest()
{
int data = ; // 使用"="初始化非静态普通成员,也可以 int data{1};
Mem Mem{, data}; // 对象成员,创建对象时,可以使用{}来调用构造函数 // 注: vs2012 不支持统一初始化方式{}
std::string name("xyz"); // 使用()来调用构造函数 return;
} int main()
{
mytest(); system("pause");
return ;
}
列表初始化
C++11引入了一个新的初始化方式,称为初始化列表(List Initialize),具体的初始化方式如下:
#define _CRT_SECURE_NO_WARNINGS #include <iostream>
#include <string>
#include <vector>
#include <map> class Person
{
public:
std::string name;
int age;
}; void mytest()
{
int a[] = {,,};
int b[]{,,}; // 注: vs2012 不支持
int i = {};
int j{}; // 注: vs2012 不支持 // 初始化列表可以用于初始化结构体类型
Person p1 = {"Frank", }; std::vector<int> ivec1(,);
// 其他一些不方便初始化的地方使用,比如std<vector>的初始化,如果不使用这种方式,只能用构造函数来初始化,难以达到效果
std::vector<int> ivec2 = {,,}; // 注: vs2012 不支持
std::vector<int> ivec3 = {,,,,}; // 注: vs2012 不支持 return;
} int main()
{
mytest(); system("pause");
return ;
}
防止类型收窄
类型收窄指的是导致数据内容发生变化或者精度丢失的隐式类型转换。使用列表初始化可以防止类型收窄。
#define _CRT_SECURE_NO_WARNINGS #include <iostream>
#include <string>
#include <vector>
#include <map> void mytest()
{
const int x = ;
const int y = ; char a = x; // 收窄,但可以通过编译
char *b = new char(); // 收窄,但可以通过编译 char c = {x}; // err,收窄,无法通过编译
char d = {y}; // 可以通过编译
unsigned char e{-}; // err,收窄,无法通过编译 float f{}; // 可以通过编译
int g{2.0f}; // err,收窄,无法通过编译
float * h = new float{1e48}; // err,收窄,无法通过编译
float i = 1.21; // 可以通过编译 return;
} int main()
{
mytest(); system("pause");
return ;
}
C++11 初始化的更多相关文章
- C++11初始化列表
[C++11之初始化列表] 在C++03中,在严格遵守POD的定义和限制条件的结构及类型上可以使用初始化列表(initializer list),构想是结构或是数组能够依据成员在该结构内定义的顺序通过 ...
- go chapter 11 初始化 map 数组
// 初始化 map m1 = make(map[string]string) // 初始化 数组 var array3 = []int{9, 10, 11, 12} var a [4]int a[0 ...
- c++11 初始化列表 bind function 示例
// 111111111111.cpp: 定义控制台应用程序的入口点. // #include "stdafx.h" #include <iostream> #incl ...
- C++ 11 之初始化
1.4中不同初始化的形式 a.string s("zhl").int i(3); //括号初始化 b.string s="zhl".int ...
- c++11之初始化列表
一.前言 C++的学习中.我想每一个人都被变量定义和申明折磨过,比方我在大学笔试过的几家公司.都考察了const和变量,类型的不同排列组合,让你差别有啥不同.反正在学习C++过程中已经被折磨惯 ...
- 11. SpringCloud实战项目-初始化数据库和表
SpringCloud实战项目全套学习教程连载中 PassJava 学习教程 简介 PassJava-Learning项目是PassJava(佳必过)项目的学习教程.对架构.业务.技术要点进行讲解. ...
- ubuntu 14.04 64位 下 编译安装MySQL 5.7.11
步骤一: 先去mysql的官方网站 去down 编译源码包 mysql 网址:www.mysql.com downloads (MySQL Community Server) 下载版本选择 sou ...
- Spring ApplicationContext(一)初始化过程
Spring 容器 ApplicationContext(一)初始化过程 Spring 系列目录(https://www.cnblogs.com/binarylei/p/10198698.html) ...
- ApplicationContext(九)初始化非延迟的 bean
ApplicationContext(九)初始化非延迟的 bean 此至,ApplicationContext 已经完成了全部的准备工作,开始初始化剩余的 bean 了(第 11 步). public ...
随机推荐
- float与double的范围和精度以及大小非零比较
1. 范围 float和double的范围是由指数的位数来决定的. float的指数位有8位,而double的指数位有11位,分布如下: float: 1bit(符号位) 8bits(指数位) ...
- 20155308『网络对抗技术』Exp7:网络欺诈防范
20155308『网络对抗技术』Exp7:网络欺诈防范 原理与实践说明 1.实践目标 本实践的目标是:理解常用网络欺诈背后的原理,以提高防范意识,并提出具体防范方法. 2.实践内容概述 简单应用SET ...
- 20155328 网络攻防 实验五:MSF基础应用
20155328 网络攻防 实验五:MSF基础应用 实践内容及过程记录 一.Windows服务渗透攻击----ms08_067 攻击机:kali 靶机:WindowsXP(英文版) 第一步,分别查看攻 ...
- 20155333 《网络对抗》 Exp6 信息搜集与漏洞扫描
20155333 <网络对抗> Exp6 信息搜集与漏洞扫描 基础问题 哪些组织负责DNS,IP的管理? 全球根服务器均由美国政府授权的ICANN统一管理,负责全球的域名根服务器.DNS和 ...
- POJ 2965&&1753
最近由于复习备考(然而考得还是很炸),很久没打题目了.现在开始刷寒假作业,不得不搞POJ 话说没有中文真的好烦啊! 先看1753 题目大意是说在一个4*4的格子中有黑白两色的棋子,你可以翻动其中的棋子 ...
- 使用 restTemplate 实现get/post 请求
get 请求(这里是在 idea 的 test包中,所以需要直接 new RestTemplate() ) 即:RestTemplate restTemplate = new RestTemplate ...
- centos 7 搭建开源堡垒机 Teleport 遇到的问题解决
不得不说 centos7 的环境版本就是高,没有再出现6.5下那些依赖组件的版本支持过低的错误了,所以说现在个人用户还是推荐用7,企业生产环境的话,可能6.5适合一些,至少2年前是这样. 安装过程: ...
- Join 和 Apply 用法全解
在关系型数据库系统中,为了满足第三范式(3NF),需要将满足“传递依赖”的表分离成单独的表,通过Join 子句将相关表进行连接,Join子句共有三种类型:外连接,内连接,交叉连接:外连接分为:left ...
- exchange 2010 的两个错误
最近公司要搭建邮件服务器 过程中 碰到两个问题,记录下来. 引以为戒 . 1,登陆界面能出来 但是无论输入什么都显示 乱码.问题原因 身份验证有问题. 如图所示: 改成这个,然后 重启 iis 就可 ...
- JVM技术周报第2期
JVM技术周报第2期 JVM技术周报分享JVM技术交流群的讨论内容,由群内成员整理归纳而成.如果你有兴趣入群讨论,请关注「Java技术精选」公众号,通过右下角菜单「入群交流」加我好友,获取入群详情. ...