第五章

原创 2018年04月15日 11:25:36

5.3.2

只有在必要时才使用后置操作符
        前置操作需要做的工作更少,只需加 1 后返回加 1 后的结果即可。而后置操作符则必须先保存操作数原来的值,以便返回未加 1 之前的值作为操作的结果。 对于更多的复杂迭代器类型,这种额外工作可能会花费更大的代价。

5.11

        一旦删除了指针所指向的对象,立即将指针置为 0,这样就非常清楚地表明指针不再指向任何对象。

5.12.6

const_cast :将转换掉表达式的 const 性质
const int ival=31;
const int *cpi=&ival;
int *pi=const_cast<int *>(cpi);
*pi=4;
cout<<ival<<'\t'<<*pi<<endl;

        此时输出“31    4”,结果并不如我们所想,这是由于IBM中称“*pi=4”为未定义的行为,即在标准C++中未定义,由编译器决定如何处理。可以看出C++里是const,就是const,这也保证了C++的稳定性。

reinterpret_cast:用来处理无关类型之间的转换

        随意在不同类型之间使用reinterpret_cast,也之后造成程序的破坏和不能使用。

typedef int (*FunctionPointer)(int); 
int value = 21; 
FunctionPointer funcP; 
funcP = reinterpret_cast<FunctionPointer> (&value); 
funcP(value);

        这个过程编译器都成功的编译通过,不过一旦运行我们就会得到"EXC_BAD_ACCESS"的运行错误,因为我们通过funcP所指的地址找到的并不是函数入口。

static_cast :编译器隐式执行的任何类型转换都可以由 static_cast 显式完成 
        static_cast和reinterpret_cast一样,两者都不能去除const限定。对于static_cast所需要的关系,"继承"绝对是其中之一,所以static_cast支持指向基类的指针和指向子类指针的相互转换。但基类到子类的转换,用static_cast并不是安全的(详见下文)。似乎也只有继承关系是可以被static_cast接受的,其他情况的指针和引用转换都会被static_cast直接扔出编译错误,而这层关系上的转换又几乎都可以被dynamic_cast所代替。这样看起来static_cast运算符的作用看起来就太小了。实际上static_cast真正用处并不在指针和引用上,而在基础类型和对象的转换上 。 而基于基础类型和对象的转换都是其他三个转换运算符所办不到的
float floatValue = 21.7;
int intValue = 7;
cout << floatValue / 7 << "\t\t" << static_cast<int> (floatValue)/7 <<endl;
cout << intValue/3 << "\t\t" << static_cast<double> (intValue)/3 << endl;
dynamic_cast

        static_cast和reinterpret_cast运算符要么直接被编译器拒绝进行转换,要么就一定会得到相应的目标类型的值。 而dynamic_cast却会进行判别,确定源指针所指的内容,是否真的合适被目标指针接受。如果是否定的,那么dynamic_cast则会返回null。

        但dynamic_cast并不是真的允许任意对象指针之间进行转换,最后返回个null值来告知转换无结果。对于继承来说,虚函数是很重要的,这不仅仅是实现多态性的一个重要标志,同时也是dynamic_cast转换能够进行的前提条件。dynamic_cast需要具有多态性的类才能进行转换,如果基类或者子类没有任何虚函数(如果基类有虚函数表,子类当然是自动继承了该表),当他们作为dynamic_cast的源类型进行转换时,编译也会失败。继承不代表有多态性,继承只是多态性的一个前提条件,virtual function是保证多态性的条件。 如果没有virtual,即使是有继承关系的类型之间,也不能使用dynamic_cast进行转换。 VS报出的编译错误很直接的:type is not polymorphic(关于dynamic_cast这篇博文写的挺好的,基本全是参照这篇博文)。

cast back

        reinterpret_cast转换的类型,的确如它的功能一样——重新解析,变成新的类型,不能重新转换回原类型结果。

思科CCNA第二学期第五章答案

1.以下行显示在 show ip route 命令的输出中。 R 192.168.3.0/24 [120/3] via 192.168.2.2, 00:00:30, Serial0/0 该...
  • u014253173
  • u014253173
  • 2015-01-21 12:22:02
  • 3366

概率论与数理统计第四版(第五章)课后答案

  • 2010年05月01日 17:28
  • 3.4MB
  • 下载

第五章思维导图

二叉树的逻辑结构  定义:二叉树是n(n>=0)个结点的有限集合,但每个根结点只有两个子树  特殊的二叉树  二叉树的基本性质  二叉树的抽象数据类型定义(左右子树中的结点具有相同数据类型及层...
  • Julyaini
  • Julyaini
  • 2014-11-12 21:19:45
  • 566

C语言第五章习题参考答案

  • 2010年12月10日 11:12
  • 5KB
  • 下载

详细解释《机器学习实战》第5章logistic回归 第5-1程序

首先贴出程序5-1代码如下:
  • roler_
  • roler_
  • 2014-12-09 15:08:28
  • 1066

Csapp读书笔记:第五章

(1)(1)安全优化,编译器在进行优化的时候必须考虑所有的情况,只执行安全的优化。所以可能会限制很多可能的优化策略。如果写出上面这样的代码,当xp==yp的时候,最后的结果等于0。否则xp和yp指向的...
  • pp634077956
  • pp634077956
  • 2016-10-25 14:09:16
  • 2164

Java编程思想第五章练习和习题

  • 2015年07月02日 18:44
  • 19KB
  • 下载

计算机网络第五章

《计算机网络》第五版 第五章内容整理
  • BJLiu0
  • BJLiu0
  • 2015-03-03 22:05:39
  • 475

机器学习实战——第五章:Logistic回归

本系列目的在于总结每一个分类器的特点(优点、缺点、使用数据类型、使用时的注意事项等)。相关代码自己搜。 python:建议使用2.7 python常用函数库:NumPy、scikit-le...
  • mmc2015
  • mmc2015
  • 2015-05-17 10:29:33
  • 931

Java - Thinking in Java 第5章 习题

1//: Main.java/** * String初始化 */class Test { String s; }class Main { public static void ma...
  • u012515223
  • u012515223
  • 2015-07-11 21:16:10
  • 1537
收藏助手
不良信息举报
您举报文章:第五章
举报原因:
原因补充:

(最多只允许输入30个字)