C++11新标准
1. 新类型
long long和unsigned long long;
char16_t 和 char32_t;
新增原始字符串;
2. 统一的初始化
C++11扩大了用大括号括起的列表(初始化列表)的适用范围,使其可以用于所有内置类型和用户定义的类型(即类对象)。
使用初始化列表时,可添加 “=”,也可不添加。
int x = { 5 } ;
double y = { 2.75 } ;
short quar [ 5 ] { 4 , 5 , 2 , 76 , 1 } ;
另外,列表初始化语法也可用于new表达式中:
int * ar = new int [ 4 ] { 2 , 4 , 6 , 7 } ; // C++11
创建对象时,也可使用大括号(而不是圆括号)括起的列表来调用构造函数:
class Stump {
private:
int roots ;
double weight ;
pubilc:
Stump ( int r , double w ) : roots ( r ) , weight ( w ) { }
} ;
Stump s1 { 3 , 15.6 } ; // oid style
Stump s2 { 5 , 43.4 } ; // C++11
Stump s3 { 4 , 32.1 } ; // C++11
然而,如果类有将模板 std::initializer_list 作为参数的构造函数,则只有该构造函数可以使用列表初始化形式。
1. 缩窄
2. std::initializer_list
C++11提供了模板类initializer_list,可将其用作构造函数的参数。
如果类有接受initializer_list作为参数的构造函数,则初始化列表语法就只能用于该构造函数。列表中的元素必须是同一类型或可转换为同一类型。
3. 声明
3.1 auto
C++11将auto用于实现自动类型判断。这要求进行显示初始化,让编译器能够将变量的类型设置为初始值的类型。
auto maton = 112 ; // maton is type int
auto pt = &maton ; // pt id type int *
double fm ( double , int ) ;
auto pf = fm ; // pf is type double (*) (double , int )
关键字auto还可简化模板声明。
例:
如果 il 是一个std::initializer_list<double>对象,则可将下述代码:
for ( std :: initializer_list < double > :: iterator p = il.begin() ; p != il.end() ; p++ )
替换为如下代码:
for ( auto p = il.begin() ; p != il.end() ; p ++ )
3.2 decltype
关键字decltype将变量的类型声明为表达式指定的类型。
e.g.
int j = n ;
double x ;
decltype ( x*n ) q ; // q same type as x*n , i.e. , double
decltype ( &x ) pd ; // pd same type as &x , i.e. , double *
3.3 返回类型后置
doubel f1 ( double , int ) ; // traditi0nal syntax
auto f2 ( double , int ) -> double ; // new syntax , return type is double
可以配合3.2的decltype来指定模板函数的返回类型。
template < typename T , typename U >
auto eff ( T t , U u ) -> decltype ( T*U ) { }
3.4 模板别名:using =
typedef std :: vector < std :: string > :: iterator itType ; // old
using itType = std :: vector < std :: string > :: iterator ;
using 可以用于模板具体化, 但typedef不能。
3.5 nullptr指针
空指针
4. 智能指针
如果在程序中使用new从堆(自由存储区)分配内存,等到不再需要时,应使用delete将其释放。
C++引入了智能指针auto_ptr,以帮助自动完成这个过程。
C++11摒弃了auto_ptr并新增了unique_ptr,shared_ptr和weak_ptr。
5. 异常规范方面的修改
添加关键字noexcept
6. 作用域内枚举
7.对类的修改
允许构造函数被继承和彼此调用。
7.1 显示转换运算符
8. 模板和STL方面的修改
8.1 基于范围的for循环
double prices [ 5 ] = { 4.99 , 10.99 , 6.87 , 7.99 , 8.49 } ;
for ( double x : prices )
std :: cout << x << std :: endl ;
8.2 新的STL容器
forward_lsit // 单向链表
unordered_map
unordered_multimap
unordered_set
unordered_multiset
8.3 新的STL方法
cbegin ( ) 和 cend ( )
8.4 valarray升级
8.5 摒弃export
8.6 尖括号
C++11不在要求在声明嵌套模板时使用空格将尖括号分开
9. 右值引用
C++11新标准的更多相关文章
- C++11新标准学习
<深入理解C++11:C++11新特性解析与应用> <华章科技:深入理解C++11:C++11新特性解析与应用>一共8章:第1章从设计思维和应用范畴两个维度对C++11新标准中 ...
- C++11新标准:nullptr关键字
一.nullptr的意义 1.NULL在C中的定义 #define NULL (void*)0 2.NULL在C++中的定义 #ifndef NULL #ifdef __cplusplus #defi ...
- C++11新标准:decltype关键字
一.decltype意义 有时我们希望从表达式的类型推断出要定义的变量类型,但是不想用该表达式的值初始化变量(如果要初始化就用auto了).为了满足这一需求,C++11新标准引入了decltype类型 ...
- C++11新标准:auto关键字
一.auto意义 编程时常常需要把表达式的值赋给变量,这就要求在声明变量的时候清楚地知道表达式的类型,然后要做到这一点并非那么容易.为了解决这个问题,C++11新标准引入了auto类型说明符,用它就能 ...
- c++11新标准for循环和lambda表达式
:first-child { margin-top: 0px; } .markdown-preview:not([data-use-github-style]) h1, .markdown-previ ...
- 关注C++细节——C++11新标准之decltype的使用注意
c++11新特性--decltype decltype是C++11加入的一个新的keyword,目的是选择并返回操作数的数据类型,重要的是,在此过程中编译器分析表达式并得到它的类型,却不实际计算表达式 ...
- 基于c++11新标准开发一个支持多线程高并发的网络库
背景 新的c++11标准出后,c++语法得到了非常多的扩展,比起以往不论什么时候都要灵活和高效,提高了程序编码的效率,为软件开发者节省了不少的时间. 之前我也写过基于ACE的网络server框架,但A ...
- C++ 11新标准实现POJ No.1002-487-3279
487-3279(重复的电话号码查询)(标签:优先队列,哈希表) 题目描述 企业喜欢用容易被记住的电话号码.让电话号码容易被记住的一个办法是将它写成一个容易记住的单词或者短语.例如,你需要给滑铁卢大学 ...
- C++ 11新标准实现POJ No.1001-Exponentiation
Exponentiation(高精度幂计算)(标签:链表,字符串,快速幂计算) 题目描述 对数值很大.精度很高的数进行高精度计算是一类十分常见的问题.比如,对国债进行计算就是属于这类问题. 现在要你解 ...
随机推荐
- 每天一个Linux命令(22)find命令_命令详解
find命令的一些常用参数的常用实例和用时的注意事项. 实例: (1)-name参数: 1)[sunjimeng@localhost home]$ find ~ -name & ...
- [原创]java WEB学习笔记31:会话与状态管理 session机制 概述(定义,session机制,session的声明周期,保存session的方式,Session的创建与删除)
本博客为原创:综合 尚硅谷(http://www.atguigu.com)的系统教程(深表感谢)和 网络上的现有资源(博客,文档,图书等),资源的出处我会标明 本博客的目的:①总结自己的学习过程,相当 ...
- opencv学习之路【四】——opencv文件结构介绍
这里要感谢这篇博主的文章 部分内容转载自此 opencv在2.3版本之前 都是用的c语言实现的 而在2.3以后的版本 做了很多重大的改变 其中最主要的是用c++重写大部分结构 然后文件的结构和2.0之 ...
- Docker 命令篇
Docker命令比较对,我们来慢慢学 Docker run(运行Container) 常用选项: -d Run container in background and print container ...
- 给GridView删除列添加删除提示
首先设置CommandField,把ShowEditButton.ShowDeleteButton属性都设置为true,也可以只设置ShowDeleteButton属性,那样下面的代码你要修 ...
- 分享知识-快乐自己:Liunx 搭建 Dubbo
1.首先配置JDK 操作步骤 2.部署 Tomcat ① 上传 Tomcat 7 解压jdk文件:tar -zxvf jdk文件名称 ② tomcat目录下的bin/启动tomcat ③ tail ...
- 绘图工具--turtle模块
turtle模块主要使用两个类,一个是TurtleScreen类,表示画布(窗口),用来展示画的位置:一个是Turtle类,用来充当画笔,用来画. 两个类的方法也以同名的函数的形式存在,所以可以以面向 ...
- 【leetcode刷题笔记】Roman to Integer
Given a roman numeral, convert it to an integer. Input is guaranteed to be within the range from 1 t ...
- 2017-2018-1 20179215《Linux内核原理与分析》第八周作业
实验:ELF文件格式与程序的编译链接 一.可执行文件的创建 从源代码到可执行程序所要经历的过程概述: 源代码(.c .cpp .h)经过c预处理器(cpp)后生成.i文件,编译器(cc1.cc1p ...
- powermock, 强力模拟
1. powermock是基于mockito或者easymock,TestNG之上的mock: 2. 提供了对于静态函数,私有函数的mock 3. 下载地址:https://github.com/po ...