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 初始化的更多相关文章

  1. C++11初始化列表

    [C++11之初始化列表] 在C++03中,在严格遵守POD的定义和限制条件的结构及类型上可以使用初始化列表(initializer list),构想是结构或是数组能够依据成员在该结构内定义的顺序通过 ...

  2. go chapter 11 初始化 map 数组

    // 初始化 map m1 = make(map[string]string) // 初始化 数组 var array3 = []int{9, 10, 11, 12} var a [4]int a[0 ...

  3. c++11 初始化列表 bind function 示例

    // 111111111111.cpp: 定义控制台应用程序的入口点. // #include "stdafx.h" #include <iostream> #incl ...

  4. C++ 11 之初始化

    1.4中不同初始化的形式     a.string s("zhl").int i(3);    //括号初始化     b.string s="zhl".int ...

  5. c++11之初始化列表

    一.前言     C++的学习中.我想每一个人都被变量定义和申明折磨过,比方我在大学笔试过的几家公司.都考察了const和变量,类型的不同排列组合,让你差别有啥不同.反正在学习C++过程中已经被折磨惯 ...

  6. 11. SpringCloud实战项目-初始化数据库和表

    SpringCloud实战项目全套学习教程连载中 PassJava 学习教程 简介 PassJava-Learning项目是PassJava(佳必过)项目的学习教程.对架构.业务.技术要点进行讲解. ...

  7. ubuntu 14.04 64位 下 编译安装MySQL 5.7.11

    步骤一: 先去mysql的官方网站 去down 编译源码包 mysql 网址:www.mysql.com downloads  (MySQL Community Server) 下载版本选择  sou ...

  8. Spring ApplicationContext(一)初始化过程

    Spring 容器 ApplicationContext(一)初始化过程 Spring 系列目录(https://www.cnblogs.com/binarylei/p/10198698.html) ...

  9. ApplicationContext(九)初始化非延迟的 bean

    ApplicationContext(九)初始化非延迟的 bean 此至,ApplicationContext 已经完成了全部的准备工作,开始初始化剩余的 bean 了(第 11 步). public ...

随机推荐

  1. Mac软件推荐

    其他: AP文档浏览器+代码片段管理工具:Dash 抓包工具:Charles  使用教程:http://www.cnblogs.com/dsxniubility/p/4621314.html 音乐播放 ...

  2. 图文列表,关于Simpleadapter

    main.xml: <RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" xm ...

  3. 有关C++的数据类型(int,long,short,float,double等等)

    再看C++ prime plus 第六版的时候 对数据类型又一次有些乱了,在看了这篇博客后,重新清晰起来了. 有关C++的数据类型(int,long,short,float,double等等)

  4. mfc 动态为控件添加事件2

    重载窗口过程 为动态控件绑定事件 一.重载窗口过程处理函数 CWnd::WindowProc virtual LRESULT WindowProc( UINT message, WPARAM wPar ...

  5. jqGrid 列内容超过一定长度省略表示

    jqgrid初始化方法中的,对应列添加formatter方法 colNames : [ "描述" ], colModel : [ { name : 'description', i ...

  6. 关于CMS的那点事 I

    CMS是Content Management System的缩写,意为"内容管理系统".CMS其实是一个很广泛的称呼,从一般的博客程序,新闻发布程序,到综合性的网站管理程序都可以被 ...

  7. 虚拟机console基础环境部署——工作目录准备

    1. 概述2. 相关约定2.1 删除旧文件2.2 创建全局共享文件目录2.3 创建全局软件安装目录2.4 创建数据放置目录3. 总结 1. 概述 上述博客中,已经为console最小化安装了操作系统. ...

  8. ANSYS渡槽槽身动水压力的施加(1)——矩形渡槽

    前言 依据水工抗震规范中关于渡槽动水压力的部分编一个用于ANSYS渡槽模型动水压力施加的命令流,是我研究生时一直想要做的一件事,原因嘛主要是想对比一下规范提供的方法和ANSYS声学流体单元模拟水体这两 ...

  9. c++ Arx二次开发创建椭圆和样条曲线

    一.本节课程 c++ Arx二次开发创建椭圆和样条曲线 二.本节要讲解的知识点 1.如何应用C++ ARX二次开发创建椭圆(对AcDbEllipse类的构造函数的直接封装和根据外接矩形来创建椭圆) 2 ...

  10. ace -- about

    Built for Code Ace is an embeddable code editor written in JavaScript. It matches the features and p ...