Category Archives: C/C++

Links

ISO C++委员会批准C++0x最终草案

IS0 C++委员会正式批准了C++编程语言国际标准最终草案(FDIS)。 标准本身已经完成,接下来将是根据委员会会议修改意见更新工作草案,预计将用三周时间完成FDIS草案,然后交给日内瓦的ITTF,最新的C++标准将在夏天发布,先前被临时命名为C++0x的新标准将被称为C++ 2011。从2003年发布的C++03到2011年的C++ 2011,新标准的制定历经了8年时间。GCC和Visual C++编译器都已加入了C++2011/C++0x的支持。 C++0x FAQ(由C++作者Bjarne Stroustrup维护) via Solidot

,
31st March 2011 3 Comments Permalink
Quotes

C语言实现trim函数

Unknown
Unknown
,
24th March 2011 0 comments Permalink

C++虚函数表解析(转)update

update: 今天花了一下午仔细看了这篇文章,却怎么也琢磨不透,因为当中的说法前后存在一些矛盾,后来脑子快崩溃的时候,做了一个大胆的假设: 也许里面有些地方说错了。 果然,当我回头看这篇文章下面的评论的时候,才知道,作者确实某些地方说错了。。。但是,回过头来评价这篇文章,真的是一绝的好文,堪称一绝是无可厚非的。 现在我将其中的错误作出相应的修改,以及矛盾的说明,并以红色字说明。 original: C++中的虚函数的作用主要是实现了多态的机制。关于多态,简而言之就是用父类型别的指针指向其子类的实例,然后通过父类的指针调用实际子类的成员函数。这种技术可以让父类的指针有“多种形态”,这是一种泛型技术。所谓泛型技术,说白了就是试图使用不变的代码来实现可变的算法。比如:模板技术,RTTI技术,虚函数技术,要么是试图做到在编译时决议,要么试图做到运行时决议。 关于虚函数的使用方法,我在这里不做过多的阐述。大家可以看看相关的C++的书籍。在这篇文章中,我只想从虚函数的实现机制上面为大家 一个清晰的剖析。 当然,相同的文章在网上也出现过一些了,但我总感觉这些文章不是很容易阅读,大段大段的代码,没有图片,没有详细的说明,没有比较,没有举一反三。不利于学习和阅读,所以这是我想写下这篇文章的原因。也希望大家多给我提意见。 言归正传,让我们一起进入虚函数的世界。 虚函数表 对C++ 了解的人都应该知道虚函数(Virtual Function)是通过一张虚函数表(Virtual Table)来实现的。简称为V-Table。 在这个表中,主是要一个类的虚函数的地址表,这张表解决了继承、覆盖的问题,保证其容真实反应实际的函数。这样,在有虚函数的类的实例中这个表被分配在了 这个实例的内存中(应该更正为 一个类的虚函数表是静态的,也就是说对这个类的每个实例,他的虚函数表的是固定的,不会为每个实例生成一个相应的虚函数表。),所以,当我们用父类的指针来操作一个子类的时候,这张虚函数表就显得由为重要了,它就像一个地图一样,指明了实际所应该调用的函数。 这里我们着重看一下这张虚函数表。在C++的标准规格说明书中说到,编译器必需要保证虚函数表的指针(这里明明说对象实例的最前面的位置存的是虚函数表的指针,注意,不是虚函数表,而是指向虚函数表的指针,然后再看下面的例子上的代码)存在于对象实例中最前面的位置(这是为了保证正确取到虚函数的偏移量)。 这意味着我们通过对象实例的地址得到这张虚函数表(这话没错,不过,通过对象实例的地址一次是取不到的,需要两次),然后就可以遍历其中函数指针,并调用相应的函数。 听我扯了那么多,我可以感觉出来你现在可能比以前更加晕头转向了。 没关系,下面就是实际的例子,相信聪明的你一看就明白了。 假设我们有这样的一个类: class Base { public: virtual void f() { cout << “Base::f” << endl; } virtual void … Continue reading

29th July 2010 7 Comments Permalink

C++的字符串分割函数

定义一个数据结构,其中成员有int len, char* internal_buf, char** strings。其中len是被分割后的字符串的个数,internal_buf用于保存原字符串。char** strings是字符串指针(或者你可以看做是指向字符数组的字符串指针,指针指向的类型是字符串,而不是单一的字符,char*strings[]),每个字符串指针用于保存被分割后的每个字符串的首地址。

16th July 2010 4 Comments Permalink

C++/C中指针与数组的差别

C++/C中指针与数组的差别简述: C++/C 程序中,指针和数组在不少地方可以相互替换着用,让人产生一种错觉,以 为两者是等价的。 数组要么在静态存储区被创建(如全局数组),要么在栈上被创建。数组名对应着 (而不是指向)一块内存,其地址与容量在生命期内保持不变,只有数组的内容可以改 变。 指针可以随时指向任意类型的内存块,它的特征是“可变”,所以我们常用指针来 操作动态内存。指针远比数组灵活,但也更危险。

15th July 2010 0 comments Permalink
Statistical data collected by Statpress SEOlution (blogcraft).