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(高精度幂计算)(标签:链表,字符串,快速幂计算) 题目描述 对数值很大.精度很高的数进行高精度计算是一类十分常见的问题.比如,对国债进行计算就是属于这类问题. 现在要你解 ...
随机推荐
- Python OOP(3) staticmethod和classmethod统计实例
staticmethod 统计实例 #!python2 #-*- coding:utf-8 -*- class c1: amount_instance=0 def __init__(self): c1 ...
- spring mvc实现Restful返回xml格式数据
最近,想在自己的小项目中搭建一个Restful风格的服务接口api,项目用的spring mvc 3,听说spring mvc本身就能十分方便的支持restful的实现,于是查询了下资料,果然非常强大 ...
- [原创]java WEB学习笔记24:MVC案例完整实践(part 5)---删除操作的设计与实现
本博客为原创:综合 尚硅谷(http://www.atguigu.com)的系统教程(深表感谢)和 网络上的现有资源(博客,文档,图书等),资源的出处我会标明 本博客的目的:①总结自己的学习过程,相当 ...
- Python 3 并发编程多进程之守护进程
Python 3 并发编程多进程之守护进程 主进程创建守护进程 其一:守护进程会在主进程代码执行结束后就终止 其二:守护进程内无法再开启子进程,否则抛出异常:AssertionError: daemo ...
- The Great Pan
The Great Pan Time Limit:1000MS Memory Limit:65536KB ...
- ibdata1文件非常大如何解决,ibdata单独存储
启用独立表空间innodb_file_per_table(如果这个参数没有开启,mysql会将数据.索引.元数据都存入到ibdata中的) 数据表 表索引 MVCC(多版本并发控制)数据 回滚段 撤销 ...
- Java -- 容器使用 Set, List, Map, Queue, Collections
1. ArrayList ArrayList<String> c = new ArrayList<String>(); c.add("hello"); c. ...
- Angular-ui-router路由,View管理
ui-router的工作原理非常类似于Angular的路由控制,他只关注状态. Angular模板 最简单的模板,例如main.html: <body data-ng-app="myA ...
- python3 字典属性
1.字典创建 >>> D={} >>> D {} >>> D2={:,(,):::'d'}} #冒号构造 1.使用 { }和 : 直接创建 &g ...
- RadioButton控件选中、取消
js: var flag = true; function chkRadio(id) { id.checked = flag; flag = !flag; } aspx.cs: this.rbtKey ...