IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> C++知识库 -> 1 C++ 11 新特性 -> 正文阅读

[C++知识库]1 C++ 11 新特性

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<int> 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};
vector<int>v{1,2,3};
compelx<double>c{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::vector<int>v{1,2,3,4};
for(int i:v)//可以写成for(auto i:v)
{
	std::cout<<i<<endl;
}
//如果将v里面的每个元素elem乘以3,可以改为如下形式:
for(auto &elem:v)
{
	elem*=3;
}

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

后续会续写······

  C++知识库 最新文章
【C++】友元、嵌套类、异常、RTTI、类型转换
通讯录的思路与实现(C语言)
C++PrimerPlus 第七章 函数-C++的编程模块(
Problem C: 算法9-9~9-12:平衡二叉树的基本
MSVC C++ UTF-8编程
C++进阶 多态原理
简单string类c++实现
我的年度总结
【C语言】以深厚地基筑伟岸高楼-基础篇(六
c语言常见错误合集
上一篇文章      下一篇文章      查看所有文章
加:2022-04-28 11:37:29  更:2022-04-28 11:38:42 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 -2024/11/23 22:35:48-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码