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(高精度幂计算)(标签:链表,字符串,快速幂计算) 题目描述 对数值很大.精度很高的数进行高精度计算是一类十分常见的问题.比如,对国债进行计算就是属于这类问题. 现在要你解 ...
随机推荐
- 美团offer
首先说明我是OP岗,RD的可能没有参考意义.本人985渣本一枚,非计算机.网络相关专业.不得不说美团的面试官给我的感觉很好,首先他们都比较极客,都是各个方向的大牛.虽然根据面试流程必须问我一些与我方向 ...
- Python3 函数 一
什么是函数? 函数一词来源于数学,但编程中的「函数」概念,与数学中的函数是有很大不同的,编程中的函数在英文中也有很多不同的叫法.在BASIC中叫做subroutine(子过程或子程序),在Pascal ...
- LinkedBlockingQueue,ArrayListBlockingQueue,SynchronousQueue
LinkedBlockingQueue :1.读写锁分开,性能较 ArrayListBlockingQueue 只有一把锁控制读写要高一些.2.无界队列,不会触发Reject异常,ArrayListB ...
- linux 文件存取 软硬联接的区别
一.linux文件存取过程 在linux系统中根目录是自引用的,比如要找 /etc/sysconfig/networkscripts/ifcfg-0文件 先根据根目录/ 的inode号,在inode ...
- 关于ios::sync_with_stdio(false);和 cin.tie(0)加速c++输入输出流
原文地址:http://www.hankcs.com/program/cpp/cin-tie-with-sync_with_stdio-acceleration-input-and-output.ht ...
- Mysql异常_01_ 誓死登进mysql_Can't connect to MySQL server on 'localhost' (10061)
现象:打开cmd,输入命令:mysql -uroot -p 回车之后,输入密码,结果进不去mysql,并且抛出异常 异常:Can't connect to MySQL server on 'local ...
- 关于CString与VARIANT(CComVariant)之间的转化
一.VARIANT.CComVariant类与CString是什么: CString是MFC定义的字符串类,VARIANT是COM标准为了使COM组件能够被各种语言使用(vc++.vb.java.py ...
- html中Meta属性
<!DOCTYPE html> <!-- 使用 HTML5 doctype,不区分大小写 --> <html lang="zh-cmn-Hans"&g ...
- Web实现音频、视频通信
Google开源实时通信项目WebRTC Google正式开源了WebRTC实时通信项目,希望浏览器厂商能够将该技术内建在浏览器中,从而使Web应用开发人员能够通过HTML标签和JavaScript ...
- 无旋Treap - BZOJ1014火星人 & 可持久化版文艺平衡树
!前置技能&概念! 二叉搜索树 一棵二叉树,对于任意子树,满足左子树中的任意节点对应元素小于根的对应元素,右子树中的任意节点对应元素大于根对应元素.换言之,就是满足中序遍历为依次访问节点对应元 ...