template 模板

1、出于通用性考虑,程序库中几乎所有东西都被设计为template形式,不支持template几乎不能使用标准程序库。

2、所谓template,是针对“一个或多个尚未明确的类型”所撰写的函数或类。使用template时,可以显示地(explicitly)或隐式地(implicitly)将类型当作参数传递。

3、目前唯一能让“template的运用”具有可移植的方式,就是在头文件中以inline function实现template function。(编译器会对函数模板进行两次编译:在声明的地方对模板代码本身进行编译、语法检查,在调用的地方对参数替换后的代码进行编译。)

4、Nontype Templates参数(非类型模板参数):type可以作为template的参数,非nontype也可以作为template参数。nontype参数因而被看作整个template类型的一部分

例如:bitset<32> flags32  //bitset with 32 bits

bitset<50> flags50   //bitset with 50 bits

5、Default Template Parameters(缺省模板参数):template classes可以有缺省参数。

例如:template <class T, class container = vector<T> >

class Myclass;

Myclass<int> x1;  //equivalent to Myclass<int, vector<int> >

6、关键字typename 关键字typename被用来作为类型之前的标识符,如typename T::SubType * ptr 与T::SubType *ptr区别。

基本型别的显式初始化

1、如果采用不含参数的、明确的constructor(构造函数)调用语法,基本类型初始化为0。

int i1;      //undefined value
int i2 = int(); //initialized with zero

此特性能够保证template类型能够在任何类型都有一个确定的初值

异常处理

1、通常异常处理,C++标准程序库可以在不“污染”函数接口(亦即参数和返回值)的情况下处理异常。如果你遇到一个意外情况,可以“抛出一个异常”来停止一般的(正常的)处理流程。

class Error;
void f()
{
...
if(exception-condition)
{
throw Error(); //create object of class Error and throw it as exception
}
}

异常机制能够保证程序在发生异常时候,像return一样优雅的退出,局部对象得到析构

int main()
{
try{
.....
f();
.....
}
catch (const Error&){
..... //handle exception
}
}

在这里,try区段中任何选型为Error的异常都将在catch中获得处理

注意区分:异常处理、错误处理

关键字exlplict

1、关键字explicit的作用,可以禁止“单参数构造函数(single argument constructor)”被用于自动类型转换。

例如:集合类型(collection classes),可以将初始长度作为参数传递给构造函数,例如你可以申明一个构造函数,以stact的初始大小为参数:

class Stack
{
explicit Stack(int size); //create stack with initial size
.....
}; //声明了explicit,则
Stack s;
s = ; //将会曝出编译错误,如没有声明,则会调用Stack(40)

新的类型转换操作符(Type Conversion Operators)

1、static_cast

将一个值以符合逻辑的方式转换类型;可以看作“利用原值重建一个临时对象,并在设立初值时使用类型转换”。唯有当上述的类型转换有所定义,整个转换才会成功。所谓的“有所定义”,可以是语言内建规则,也可以是程序员自定的转换动作。

float x;
...
cout << static_cast<int>(x); //print x as int f(static_cast<string>("hello")); //call f() for string instead of char*

2、dynamic_cast

将多态类型(ploymorphic type)向下转型(downcast)为其实际静态类型(real static type).这是唯一在执行时期进行校验的转型动作,你可以用它来检验某个多态对象的类型。

class Car; //abstact base class(has at least one virtual function)

class Cabriolet : public Car{
....
} ; void f(Car* cp)
{
Cabriolet* p = dynamic_cast<Cabriolet*>(cp)
if(p == NULL)
{
//did not refer to an object of type cabriolet
...
}
}

3、const_cast

设定或去除类型的常数型(constness),亦可以去除volatile饰词,除此之外不用于任何转换

4、reinterpret_cast

此操作符与实际编译器定义

常数静态成员的初始化(constant static members)

我们终于能够在class声明中对“整数型常数静态成员”直接赋予初值。

class MyClass
{
static const int num = ;
int elems[num];
...
}; //注意,你还必须为class之中声明的常静态成员,定义一个空间
const int MyClass::num; //no initialization here

main()定义式

其中已经内置了return 0

c++几个新特性的更多相关文章

  1. SQL Server 2014 新特性——内存数据库

    SQL Server 2014 新特性——内存数据库 目录 SQL Server 2014 新特性——内存数据库 简介: 设计目的和原因: 专业名词 In-Memory OLTP不同之处 内存优化表 ...

  2. ElasticSearch 5学习(10)——结构化查询(包括新特性)

    之前我们所有的查询都属于命令行查询,但是不利于复杂的查询,而且一般在项目开发中不使用命令行查询方式,只有在调试测试时使用简单命令行查询,但是,如果想要善用搜索,我们必须使用请求体查询(request ...

  3. [干货来袭]C#6.0新特性

    微软昨天发布了新的VS 2015 ..随之而来的还有很多很多东西... .NET新版本 ASP.NET新版本...等等..太多..实在没消化.. 分享一下也是昨天发布的新的C#6.0的部分新特性吧.. ...

  4. CSS3新特性应用之结构与布局

    一.自适应内部元素 利用width的新特性min-content实现 width新特性值介绍: fill-available,自动填充盒子模型中剩余的宽度,包含margin.padding.borde ...

  5. 【译】Meteor 新手教程:在排行榜上添加新特性

    原文:http://danneu.com/posts/6-meteor-tutorial-for-fellow-noobs-adding-features-to-the-leaderboard-dem ...

  6. 跨平台的 .NET 运行环境 Mono 3.2 新特性

    Mono 3.2 发布了,对 Mono 3.0 和 2.10 版本的支持不再继续,而且这两个分支也不再提供 bug 修复更新. Mono 3.2 主要新特性: LLVM 更新到 3.2 版本,带来更多 ...

  7. Atitit opencv版本新特性attilax总结

    Atitit opencv版本新特性attilax总结 1.1. :OpenCV 3.0 发布,史上功能最全,速度最快的版1 1.2. 应用领域2 1.3. OPENCV2.4.3改进 2.4.2就有 ...

  8. es6 新特性2

    es6其他几个非常有用的新特性. import export 这两个家伙对应的就是es6自己的module功能. 我们之前写的Javascript一直都没有模块化的体系,无法将一个庞大的js工程拆分成 ...

  9. ES6 新特性

    ECMAScript 6(以下简称ES6)是JavaScript语言的下一代标准.因为当前版本的ES6是在2015年发布的,所以又称ECMAScript 2015. 也就是说,ES6就是ES2015. ...

  10. 谈谈我的微软特约稿:《SQL Server 2014 新特性:IO资源调控》

    一.本文所涉及的内容(Contents) 本文所涉及的内容(Contents) 背景(Contexts) 撰写经历(Experience) 特约稿正文(Content-body) 第一部分:生活中资源 ...

随机推荐

  1. HTML+CSS Day06 超链接的样式与搭配

    1.格式 a:link    {} 普通的.未被访问的链接 a:visited {}  用户已访问的链接 a:hover  {} 鼠标指针位于链接的上方 a:active{} 链接被点击的时刻 2.常 ...

  2. 【转】ethtool 命令详解

    命令描述: ethtool 是用于查询及设置网卡参数的命令. 使用概要:ethtool ethx       //查询ethx网口基本设置,其中 x 是对应网卡的编号,如eth0.eth1等等etht ...

  3. oracle-查询执行速度慢的sql

    Oracle 查询每天执行慢的SQL 2014-12-11 18:00:04 分类: Oracle 链接:http://blog.itpub.net/28602568/viewspace-136484 ...

  4. 快学Scala-第二章 控制结构和函数

    知识点: 1.条件表达式 if(x>0) 1 else 0 scala每个表达式都有一个类型,如果一致则为它们的类型,如果为混合类型表达式,则为它们的公共超类型Any. if(x>0) 1 ...

  5. 给input元素添加float. 去除IE6 下input的空隙

    <!DOCTYPE html> <html> <head> <meta charset="utf-8"> <title> ...

  6. hdu 3345 War Chess

    War Chess Time Limit : 2000/1000ms (Java/Other)   Memory Limit : 32768/32768K (Java/Other) Total Sub ...

  7. Log4j NDC MDC

    NDC(Nested Diagnostic Context)和MDC(Mapped Diagnostic Context)是log4j种非常有用的两个类,它们用于存储应用程序的上下文信息(contex ...

  8. 转:利用ant与jmeter实现负载测试自动化

    性能测试一直以来都是测试领域一个令人争议的话题.测试的参考标准.评判依据及测试的方法选择都很难有一个统一的说法.但无论如何,对于需要能够承受一定压力而运行的程序来说,进行其进行功能和性能测试是一个必不 ...

  9. hdu_5179_beautiful number(数位DP)

    题目连接:http://acm.hdu.edu.cn/showproblem.php?pid=5179 题意:给你一个范围,问你漂亮的数有多少个,漂亮的数的定义为 数位高的比数位低的大,并且 数位高的 ...

  10. android zip解压缩

    android  zip解压缩 public class ZipUtils { public ZipUtils() { } /* 以输入流的形式解压 */ public static void UnZ ...