- 1、本文档共15页,可阅读全部内容。
- 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
- 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
C++基本语法(中) ZZZ_开心部落
百度空间 | 百度首页 | 登录
开心部落
主页博客相册 |个人档案 |好友
查看文章
C++基本语法(中) ZZZ
2009-04-07 20:38
0. 类型转换中的提示实际上就是内置数据类型的提升,如char转换为int,bool转换为int,float转
换为double等。
1. 类型转换中的标准转换有五种类型:(1)整值类型转换(不包括提升);(2)浮点转换;(3)浮点-整
值转换;(4)指针转换和(5)bool转换。前三种转换是有潜在危险的转换。所有的标准转换都是等价
的。一些注意点:0可以被转换为任何指针类型,这样创建的指针称为空指针值,同时0也可以是任
何整型常量表达式。常量表达式0L及0x00都属于整值类型因此能够被转换为int * 的空指针值。指针
转换允许任何指针类型的实参转换成void * ,但是函数指针不能用标准转换为void * 。
2. 对于引用参数来说,如果实参是该引用的有效初始值,则为精确匹配,否则为不匹配。
3. 模板非类型参数代表了一个常量表达式,由一个普通的参数声明构成,表示该参数名代表了模
板定义种的一个常量。在实例化时,该常量会被一个编译时已知的常量值代替。
4. 在模板中,为了支持类型表达式,必须使用typename ;如typename Param::name *p;定义了一
个指针p;如果不使用typename则该表达式为乘法。另外,模板函数也可以被声明为inline或
extern,必须把指示符放在参数模板后。如template typename T inline T fun1(){…}
5. 函数实参的推演中三种类型转换是允许的:(1)左值转换;(2)限定转换(const和volatile指示符);
(3)到一个基类的转换:如果实参是一个类,它有一个从被指定为函数参数的类模板实例化而来的基
类;如下面的代码:template typename T class Array {}; template typename T T min
(ArrayT array) {…};
6. 可以使用显式指定模板参数,模板参数被显式指定在逗号分隔的列表中,紧跟在函数模板实例
的名字后面;如minunsigned int(a, b);代码强行指定模板参数以unsigned int转换。模板显式指定
参数类似于默认参数,只能省略后面的参数。
7. C++支持两种模板编译模式:包含模式和分离模式。包含模式下,在每个模板被实例化的文件
中包含函数模板的定义,并且往往把定义放在头文件中;分离模式下,函数模板的声明被放在头文
件中,它的定义放在另外一个实现文件中,函数模板在实现文件中的定义必须使用关键字export 。
8. C++支持模板的显式实例化,在显式实例化声明所在的文件中,函数模板的定义必须被给出。
如template typename T T f(T t); 显式实例化为int *类型,template int *f(int *);
9. C++支持模板的显式特化定义,如:template typename T T max(T t1, T t2){…}显式特化
file:///J|/c/c++一些很常用的item_0.html(第 1/4 页)2009-10-5 19:58:21
C++基本语法(中) ZZZ_开心部落
const char *类型的定义:template const char *maxconst char *(const char *c1, const char
*c2);显式特化隐藏了通用模板对于该类型的实例。如果模板实参可以从函数参数中推演出来,则模
板实参的显式特化可以从其中取消。如上面的例子: template const char *max(const char *,
const char *);其省略与显式指定模板参数一样。
10. 抛出异常可通过throw表达式来实现。如抛出一个popOnEmpty(类对象)的异常,表达式为throw
popOnEmpty();同时在catch子句中,为了防止大型类对象的复制,可以将catch子句的异常声明改
为引用。
11. 在查找用来处理被抛出异常的catch子句时,因为异常而退出复合语句和函数定义,这个过程称
为栈展开。C++保证,随着栈的展开,尽管局部类对象的生命期是因为抛出异常而结束,但是所有
的析构函数将被调用。要重新抛出接受到
文档评论(0)