c 11 初始化列表,c++ 初始化列表,C++11系列学习之列表初始化

c 11 初始化列表,c++ 初始化列表,C++11系列学习之列表初始化

本文主要介绍C 11系列学习的列表初始化。标准的初始化方法太复杂,限制太多。所以新标准中统一了初始化方。为了使初始化有明确的效果,提出了列表初始化的概念。下面我们一起来学习详细的介绍。

目录

前言:旧标准初始化模式技术细节总结C 11标准初始化模式初始化列表

前言:

因为旧标准初始化方法太复杂,限制太多,所以在新标准中统一了。为了使初始化有明确的效果,提出了列表初始化的概念。

旧标准初始化方式

普通数组初始化:

int i_arr[3]={1,2,3}

POD类型初始化(即plain old data类型,可以直接使用memcpy复制的对象):

结构A

{

int x;

结构B

{

int I;

int j;

} b;

} a={1,{2,3 } };

拷贝初始化:

int I=0;

Foo类

{

公共:

Foo(int) {}

} foo=123

直接初始化:

int j(0)

Foo酒吧(123)

C++11标准初始化方式

C 11标准中{}的初始化方法是聚合类型,也就是拷贝的形式来赋值

非聚合类型在C 11标准中由构造函数初始化。

聚合类型:

类型是一个普通的数组类型和一个类,

并且满足以下条件:

没有用户定义的构造函数、无私拥有或保护的非静态数据成员、没有基类、没有虚函数可以让非静态数据成员直接由{0}和=初始化

初始化列表技术细节

观察下面这两个:

int arr[] {1,2,3}

std:setint ss={1,2,3}

STL中不指定个数进行初始化之所以能实现,靠的是I轻量级的类模板,也是C++11中的新特性std::initializer_listinitializer_list使用

FooVector类

{

STD:vector content _;

公共:

ovector(STD:initializer _ listintlist){//重要技术要点

for(auto it=list . begin();它!=list . end();它){

内容_。后退(*它)

}

}

}

Ovector foo _ 1={1,2,3,4,5 }//不仅如此

Ovector foo _ 2 ({1,2,3,4,5 })//也可以发送同类型的数据集。

initializer_list的特点:

它是一种轻量级容器类型,内部定义了迭代器等容器所必需的概念。对于std:initializer_list,可以接收任意长度的初始化列表,但是元素类型必须是相同的类型T(或者可以转换为T)它有3个成员接口:size(),begin()和end()。它只能作为一个整体进行初始化或赋值。

注意:std:initializer_list的效率很高,所以内部部门不负责保存初始化列表中元素的副本,只存储列表中元素的引用!因此,它不能用于返回临时变量!

避免类型收窄:

c有隐式类型转换的特点,比如给整数赋值浮点数,精度会损失,小数点后直接截断。初始化列表有助于避免隐式类型转换。因为它不允许这种转换发生。

但是也会随着编译器的不同而不同:

浮点ff=1.2

float ff={1.2}

在gcc4.8下没有警告和错误,但在Microsoft Visual C 2013中,会收到一个编译错误。因为1.2默认是double类型,由double转换成float会发生隐式类型转换,但是精度损失没有发生。

总结

C 11新的初始化方法给编程带来了很多方便,这也是新标准的思路和改进方向。

关于C 11系列学习列表初始化的这篇文章到此为止。关于C 11列表初始化的更多信息,请搜索我们之前的文章或者继续浏览下面的相关文章。希望大家以后能多多支持我们!

郑重声明:本文由网友发布,不代表盛行IT的观点,版权归原作者所有,仅为传播更多信息之目的,如有侵权请联系,我们将第一时间修改或删除,多谢。

相关文章阅读

  • vs2015打包安装程序,vs2015程序打包,VS2022实现VC++打包生成安装文件图文详细历程
  • vc++6.0的快捷键,vc 快捷键
  • vc++6.0的快捷键,vc 快捷键,VC6.0常用快捷键大全
  • 绘制圆角矩形的方法,c++ 画矩形,C#画圆角矩形的方法
  • 懒汉式和饿汉式代码,单列模式懒汉和饿汉,C++单例模式的懒汉模式和饿汉模式详解
  • 好用的C++编译器,c++编译软件哪个好
  • semaphore c#,c++ semaphore
  • semaphore c#,c++ semaphore,C++中Semaphore内核对象用法实例
  • dev-c++使用教程,dev c++安装教程
  • dev-c++使用教程,dev c++安装教程,Dev C++ 安装及使用方法(图文教程)
  • C里面指针常量和常量指针的区别,c++指针常量和常量指针
  • C里面指针常量和常量指针的区别,c++指针常量和常量指针,简单总结C++中指针常量与常量指针的区别
  • com组件初始化失败,c#开发com组件,C++中COM组件初始化方法实例分析
  • c++静态成员变量使用,c++静态成员函数和静态成员变量
  • c++静态成员变量使用,c++静态成员函数和静态成员变量,详解c++ 静态成员变量
  • 留言与评论(共有 条评论)
       
    验证码: