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(高精度幂计算)(标签:链表,字符串,快速幂计算) 题目描述 对数值很大.精度很高的数进行高精度计算是一类十分常见的问题.比如,对国债进行计算就是属于这类问题. 现在要你解 ...
随机推荐
- Oracle数据库体系结构(1)整体概述
oracle数据库的存储结构: 逻辑存储结构:oracle内部的组织和管理数据的方式 物理存储结构:oracle外部(操作系统)组织和管理数据的方式 oracle对逻辑存储结构和物理存储结构的管理是分 ...
- 从输入url到浏览器呈现网页发生了什么?
大致能分成两个部分:网络通信与页面渲染 一.网络通信 互联网各个网络设备间的通信均基于TCP/IP协议,此协议将整个过程进行分层,由上至下分别为: 应用层.传输层.网络层和数据链路层 1.输入URL ...
- java入门了解13
小知识点: 网络编程:主要解决计算机间数据传输 不需要html页面可以达到数据传输:QQ,微信 网页编程:继续Html页面基础上数据交互:OA,天猫... java方向:web方向,annrod常用S ...
- 启动Hadoop时DFSZKFailoverController没有启动
在启动Hadoop成功后,并没有报错信息,jps查看进程,发现DFSZKFailoverController没有启动成功,后来发现是因为防火墙的原因,关掉重试就OK了 systemctl stop f ...
- hdoj1001--Sum Problem
Problem Description Hey, welcome to HDOJ(Hangzhou Dianzi University Online Judge).In this problem, y ...
- Quota Management and Enforcement
Neutron API中大多的resource都需要quota limits. Neutron API暴露出一个extension 来管理quota,Quota limits are enforced ...
- Spark- Spark基本工作原理
Spark特点: 1.分布式 spark读取数据时是把数据分布式存储到各个节点内存中 2.主要基于内存(少数情况基于磁盘,如shuffle阶段) 所有计算操作,都是针对多个节点上内存的数据,进行并行操 ...
- 常用的SQL 总结
1.去重 SELECT * FROM my where id in(SELECT MAX(id) from my GROUP BY id,iid,pid)//取 id,iid,pid重复的最大值
- appium界面元素介绍
一.主窗口 主页面顶部从左到右依次是: AndroidSettings:android相关的设置 GeneralSettings:全局设置,设置appium相关的内容 DeveloperSetting ...
- codeforces 515C C. Drazil and Factorial(水题,贪心)
题目链接: C. Drazil and Factorial time limit per test 2 seconds memory limit per test 256 megabytes inpu ...