C/C++
小李飞小刀
上坡路难走
展开
-
浮点数操作
float fx = 49.03f; int nx = fx * 100;printf("%d", nx);运行上述代码,结果:4902。用VC6.0,2005,GCC编译运行结果都是一样。为什么会这样呢,是因为浮点数运算具有不精确性。其实编译上面的代码,编译器会有警告的。warning C4244: 'initializing' : conversion from 'float' to 'int', possible loss of data将单精度浮点数强制转换为整形会造成数据精度丢失。因此我们在对原创 2010-12-14 20:59:00 · 1173 阅读 · 0 评论 -
memcpy的使用问题
具体说一下使用环境吧,就是我通过网络从设备端获得一段数据buf以及其长度,然后我将这段内存拷贝到我自己的结构体中,这都没有问题,关键在于我指定的拷贝长度值是从网络获得的数据buf的长度。 有什么问题呢,由于通信双方扩展了各自的结构体,也就是buf的长度比原来增大了。由于我之前的这种拷贝方式,使用老的软件访问新的设备时,数据buf的长度就比结构体的长度要大,memcpy就会将一段结构体之后的内存指定了数值,这将带来不可测的问题。 因此在网络通信时,在使用memcpy时长度的指定最好使用结构体的原创 2010-12-17 19:30:00 · 804 阅读 · 0 评论 -
如何在运行时确定对象类型(RTTI)
<br />作者:NorthTibet<br /> RTTI 是“Runtime Type Information”的缩写,意思是:运行时类型信息。它提供了运行时确定对象类型的方法。本文将简略介绍 RTTI 的一些背景知识、描述 RTTI 的概念,并通过具体例子和代码介绍什么时候使用以及如何使用 RTTI;本文还将详细描述两个重要的 RTTI 运算符的使用方法,它们是 typeid 和 dynamic_cast。<br /> 其实,RTTI 在C++中并不是什么新的东西,它早在十多年以前就已经出现了。转载 2010-12-28 17:18:00 · 369 阅读 · 0 评论 -
关于C++中RTTI的思考
<br />RTTI(运行时类型信息),是所有RAD开发工具的基础。 这段时间,因为需要在自己的软件中加入扩展的RTTI功能,于是专门对RTTI进行了研究,现在一些心得写下来。<br /> RTTI是比较新的编程语言提供的能力,C、Fortran、Basic就没有,而现在几乎所有现代的、可视化的编程语言都提供了RTTI功能。C++的标准中也对RTTI作了规定。但相对其它语言而言,C++的RTTI信息是最简单的。 <br /><br />一、RTTI典型的应用需求 <br /> 1、类型的识别,即能在转载 2010-12-28 17:15:00 · 324 阅读 · 0 评论 -
《C++沉思录》 第六章 句柄 第一部分
<br /> 简单回顾一下第五章节,Andrew Koening向我们提出了一个问题,在一个继承体系中,如何设计一个容器可以容纳各个不同的子类对象。显然无法使用基类对象数组,如果是抽象基类,没有办法进行实例化。很自然的我们容易想到可以使用基类指针,但这样对象内存管理便交于用户了,容易造成很多麻烦问题。为了解决此问题,Koening使用了代理类。<br /> 什么是代理类呢,简单来说,就是封装了基类指针并可以提供所有功能接口的类。在代理类的构造过程中,使用对象的指针初始化代理类的基类指针成员原创 2011-01-25 17:16:00 · 642 阅读 · 0 评论 -
《c++沉思录》第七章 句柄:第二部分
<br /> 在第六章中,一直跟着书走,并没有深入思考第六章中实现的句柄,一看第七章还是句柄,心生怀疑难道句柄还没有结束么,之前的设计有什么问题么,唉是真有,第六章中我们要实现句柄操作需要包括三个部分:原数据类,数据的引用计数封装类, 句柄类。问题出在引用计数这部分,我们的封装类使用的是具体类,没有办法做到通用,我们仍然必须回到基类指针上,我们可以让中间的类封装基类指针,这个是可以的,通过修改实现是没有问题的,即UPoint中同样使用Point* p,复杂一些,但仔细考虑一下结构Handle 中原创 2011-01-26 16:28:00 · 591 阅读 · 0 评论 -
sscanf 使用中遇到的问题
unsigned byte byteRed, byteGreen, byteBlue;sscanf(strRGB.c_str(), "RGB(%d,%d,%d)", &byteRed, &byteGreen, &byteBlue);一个简单的小问题,却两次在上面犯错。还是记录下来吧。上面的代码 sscanf 中的format %d 所以类型应该 int类型,这里用unsigned byte会导致原创 2013-12-17 22:25:38 · 775 阅读 · 0 评论