栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > C/C++/C#

1 C++ 11 新特性

C/C++/C# 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

1 C++ 11 新特性

文章目录
    • 1 auto自动推导
    • 2 一致性初始化与初值列
      • 2.1 一致性初始化
        • 2.2.1大括号初始化有三种形式:
      • 2.2 窄化
    • 3 Range-Based for 循环

1 auto自动推导

C++11允许你声明一个变量或对象而不需要指明其类型,只需说他是auto,例如:

 auto i=5;//i是int类型
 double f();
 auto d=f();//i是double类型

以auto声明的变量,其类型会根据其初始值被自动推导出来,因此一定需要一个初始化的操作:

auto i;//这种定义是错误的
//可为它加上额外的限定符,例如:
static auto d=0.19;
//如果类型很长或表达式很复杂,auto特别有用,例如:
vector v;
auto pos=v.begin();
auto lamd=[](int x){retrun x;};

auto的限制:

  • auto的使用必须马上初始化,否则无法推导出类型 auto在一行定义多个变量时,各个变量的推导不能
  • 产生二义性,否则编译失败
  • auto不能用作函数参数 在类中auto不能用作非静态成员变量 auto不能定义数组,可以定义指针
  • auto无法推导出模板参数
int i=0;
auto *a = &i; // a是int*
auto &b = i; // b是int&
auto c = b; // c是int,忽略了引用
const auto d = i; // d是const int
auto e = d; // e是int
const auto& f = e; // f是const int&
auto &g = f; // g是const int&
2 一致性初始化与初值列 2.1 一致性初始化

在C++11之前,变量的初始化有许多方式 (如小括号,大括号,赋值号),且不同变量和类又有不同的初始化方式。(如,结构体能用{}初始化,类用{}则会出错。)

 float f=1;
 int i(1);
 double d = double(1.88);
struct student={"name","age"};
class animal=("foots","eyes","tail");
2.2.1大括号初始化有三种形式:
int width{5};//将值5直接初始化为可变宽度(首选)
int height = { 6 }; //将大括号内的6初始化,复制到变量height
int depth {}; // value initialization  

这样很容易混淆,为此,C++11引入了“一致性初始化”,意思是面对任何初始化动作,你可以使用相同的豫发,也就是使用大括号,一下借成立:

int value[] {1,2,3};
vectorv{1,2,3};
compelxc{2.0,3.0};//等价于c(3.0,4.0);
2.2 窄化

也就是其精度降低或造成数值变动——对大括号而言是不成立的,例如:

int x(1.2)//成立,但是降低精度,x会变成5
int x2=8.3;//成立,x2会变成8
int x3{9.0}//不成立,会出现窄化,降低精度
char c{3};//成立
char c1{9999};//不成立,超出范围
3 Range-Based for 循环

C++ 11引入了一种崭新的for循环形势,可以逐一迭代某个给定的区间,数组,集合内的每一个元素语法如下:

for(decl: coll)
{
	statement
}

其中decl是给定coll集合中每个元素的声明,针对这些元素,给定的statement会被执行,例如下面针对vector向量,调用给定的语句,会输出每一项:

std::vectorv{1,2,3,4};
for(int i:v)//可以写成for(auto i:v)
{
	std::cout<
	elem*=3;
}

这里“声明elem”为一个引用,如果不这么做,for循环的语句或作用在元素的一份local copy身上

后续会续写······

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/836256.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号