[法语学习]3C++语法基础2.ppt

  1. 1、本文档共46页,可阅读全部内容。
  2. 2、有哪些信誉好的足球投注网站(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
  3. 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  4. 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
[法语学习]3C语法基础2

关于函数模板 参数化的函数称为函数模板,代表的是一个函数家族 函数模板不是一个实实在在的函数。编译系统不为其产生任何执行代码。只有当编译器发现一个具体的函数调用时,才根据具体的参数类型产生相应的代码,这部分代码称为模板函数。它是函数模板的一个具体实例,只处理唯一的一种数据类型。 模板函数的生成由编译系统隐式生成,其实质是函数重载 C++的类型转换 运算符 应尽量避免类型转换(dynamic_cast除外) 使用类型转换常常引起类型错误或者数值截断 C风格的类型转换在程序中难以发现 类型转换潜在着极其高的破坏性 丑陋的操作应该使用丑陋的语法形式 static_cast:比C的强制类型转换符更安全的类型转换 用法:static_cast new_type (expression) static_cast将表达式的结果类型转换为new_type类型 * static_cast 示例 #include iostream using namespace std; int main() { int a = 10; //编译通过,但p1所指并非double对象 double *p1 = (double *)a; //编译器阻止将int *转换为double * double *p2 = static_cast double * (a); //确实想将int *转换为double * double *p3 = reinterpret_cast double * (a); return 0; } reinterpret_cast:按bit重新解释类型 用法:reinterpret_cast new_type (expression) 该运算符只能在指针之间转换 例 #include iostream using namespace std; int main() { int n = 9; double d = reinterpret_cast double (n); cout reinterpret_cast : d = d endl; d = static_cast double (n); cout static_cast : d = d endl; return 0; } static_cast和reinterpret_cast 二者均修改了操作数类型。但它们不是互逆的 reinterpret_cast 仅仅是重新解释了对象的比特模型而没有进行二进制转换 int num = 10, *pointer = num; double *ptr = reinterpret_cast double * (pointer); 这里仅仅复制了pointer内的bit位到ptr中,没有做类型检查和对应的二进制转换,得到的ptr是无用值 static_cast 在编译时使用类型信息执行转换,在转换执行必要的检测(诸如指针越界计算, 类型检查)。其操作数相对是安全的。 int n = 9; double d = static_cast double (n); int 类型和double类型的二进制表达是不同的 将整数 9 转换到 双精度整数 9,static_cast 需要正确地为双精度整数 d 补足比特位 * const_cast运算符 const_cast用于在编译时移除变量的const限定符 用法:const _cast type (expression) #include iostream using namespace std; int main() { const int c = 7; int* q1 = c; // error int* q2 = (int*)c; // ok(但 *q2=2; 是未定义的行为) int* q3 = static_castint *(c); //错,不能去除const性质 int* q4 = const_castint *(c); // 去除const性质 return 0; } 何时用到 const_cast #include iostream using namespace std; void f(int *p) { cout *p endl; } int main(void) { const int a = 10; const int *b = a; // Function f() expects int*, not const int* // f(b); int

文档评论(0)

skvdnd51 + 关注
实名认证
内容提供者

该用户很懒,什么也没介绍

1亿VIP精品文档

相关文档