Visual C++为了让程序员能够自由的使用C++语言完成Windows应用程序的编写,可谓“煞费苦心”,然而,同时因为一些原因Visual C++却饱受争议。这些争议包括以下5点。
1.关于Visual C++对标准C++的支持
前面谈到,Visual C++不是唯一的C++编译器提供者,在linux环境下,GCC就很有知名度。而由于历史原因,Visual C++ 6.0推出的时候,C++的标准还未形成,Visual C++ 6.0对标准C++的支持很差,据上面的数字来说,它只到70%左右。
但是细想,C++的标准化是什么时候?C++自推出以来,其标准只有一个:即1998年由美国国家标准化协会ANSI和国际标准化组织ISO正式发布的C++语言的国际标准C++98(ISO/IEC 14882:1998)。再来看看1998年的Visual C++ 6.0,那时的Visual C++ 6.0已经作为成熟的产品推出,其中包含了一些相对前卫的C++特性。就像要求山顶洞人围猎时必须带有狩猎证一样,我们怎么可以指望Visual C++ 6.0包含对标准C++的完整支持呢?当然,在前面的内容我们也讲到了,Visual C++在后面的版本增强了对标准C++的支持,并使支持率达到98%以上!所以,对那些希望学习标准C++的读者来说,千万不要再抱着Visual C++ 6.0不放了。
提示
关于C++的标准化,2003年10月15日,ISO推出了C++标准的第2版C++2003(ISO/IEC 14882:2003)。该版本在语法特征上没有什么变化,只是纠正了原版的各种错误,并进行了一些技术上的修订。
2.关于Visual C++的体积
在以上几个版本中,Visual C++ 6.0是最小的Visual C++,它的体积大概是一张CD,然而发展到Visual C++ 2008,其体积可以达到2GB!因此很多程序员对于Visual C++的第一印象是太过臃肿,实际上,Visual C++之所以能够这么肥胖,是因为它提供了更多、更强的功能。Visual C++的界面友好性及与其他系统(如:Microsoft Office)的集成性,是谁也不可否认的。在存储空间的成本日益变得廉价的今天,该特性不应成为程序员选择Visual C++的否决因素。
3.关于Visual C++的MFC
MFC是Visual C++的灵魂,至少对其最初的版本来说是这样。然而,MFC让程序员产生了强烈的“MFC依赖症”,一旦离开了MFC,程序员就很难编写出合适的程序,这让Visual C++显得与其他开放技术的不兼容。
MFC将常见的Windows对象和操作都封装起来了,这让程序员感觉到自己是一位面对黑色宇宙的宇航员,一旦离开了宇宙飞船,就会晕菜。至于宇宙飞船为什么可以飞起来,如果一个程序员缺少足够的时间和能力,就很难再去研究。如果一个Visual C++程序员不知道如何使用代码手动的实现一个消息映射,那就很难掌握到真正的MFC。
一言以蔽之,MFC的不幸在于:其高超的封装性反而让程序员望而却步,进而招来更多的负面评价:MFC不好用、MFC是封闭的、Visual C++是可怕的。
微软应该也意识到了这个问题,将所有的程序基于MFC来开发是很可怕的。因此他们提出了ATL,将那些小型的、有用的类扔到ATL里面去,而不必再依赖于MFC环境。比如:当读者编写一个使用CString的程序,就不再需要MFC。如果想将一堆CString扔进一个map当中去,也可以不使用MFC。
4.关于Visual C++的语言扩展
如果你参与过Java语言的开发,你会发现有些事情在Java语言中实现起来轻而易举:

该段代码演示了如何获取一个对象的类信息,并从一个类创建一个实例对象。在C++语言中,要实现类似的功能简直比登天还难!但是Visual C++觉得它应该帮助程序员来做这件事,遗憾的是它骨子里还是C++,先天不足,所以最后它不得不依靠一些旁门左道(如:宏)等非正当的手段来维护一个属于自己的王国,而这个王国的基础就是CObject及CRuntimeClass。在Visual C++项目中,很难找到与CObject、CRuntimeClass完全无关的代码,程序员可以通过CObject、CRuntimeClass拥有超强的能力,但是也常常会因为这些黑幕技术感到困惑。
5.关于Visual C++的语法扩展
在Visual C++.NET中,你可以使用如下语句:

这段代码被称做托管代码,它采用了C++/CLI(CLI:Common Language Infrastructure)语言(在某段时间,这门语言被称做“托管C++”语言)。“CLI”即公共语言基础结构(Common Language Infrastructure),这是一个支持动态组件编程模型的多层架构。在许多方面,它所表示的对象模型和C++的完全相反。它是一个运行时软件层 ,一个虚拟执行系统,运行在应用程序和底层操作系统之间。斜线“/”表示它是静态C++对象模型到动态CLI组件对象模型的一种绑定。
C++/CLI语言在兼容原有的C++标准的同时,重新简化了托管代码扩展的语法,提供了更好的代码可读性。和微软.NET的其他语言一样,微软向ECMA提交了C++/CLI的标准化请求,并且被ECMA通过成为正式的标准。C++/CLI现在可以被Visual C++ 2005和更高版本的编译器支持。
大家知道,.NET框架封装了大量的API,例如网络访问、字符串操作、数据访问、XML服务、图形界面控件库、邮件服务、加密服务、文件输入/输出,甚至是WMI管理,也使得应用程序员可以编写更加简洁的代码。通过采用C++/CLI,传统的C++代码可以较快地移植到新的平台上,而且即使不完全重写代码,也可以通过互操作在同一个模块中无缝整合托管和非托管代码,从新的.Net框架中获益。一个比较显著的特性是:使用C++/CLI编写托管代码,内存管理的工作可以让CLR去自动处理,访问时也增加了类型检查,减少了缓冲区溢出和内存泄漏的危险,增加了程序的稳定性。
按理说,这项发明应该值得C++程序员为之欢欣鼓舞,但是,传统的C++程序员对C++/CLI的态度极其复杂。更有甚者,称C++/CLI为“被阉割的C++”。C++/CLI彷徨在标准C++与C#之间,进退两难。
===========================================

以上摘自《把脉VC++》第2.1.4小节的内容,如果你想与我交流,请点击如下链接加我为好友:http://student.csdn.net/invite.php?u=113292&c=8913f87cffe7d533
分享到:
相关推荐
白乔原创:VC之控件篇[3]-VCer_net VC代码 VC开源 VC文章 VC工具 VC知道 VC词典 VC论坛.mht
白乔原创:VC之控件篇-VCer_net VC代码 VC开源 VC文章 VC工具 VC知道 VC词典 VC论坛.mht
白乔原创:VC之控件篇[2]-VCer_net VC代码 VC开源 VC文章 VC工具 VC知道 VC词典 VC论坛.mht
【压缩包子文件的文件名称】"白乔原创:VC之美化界面篇-VCer_net VC代码 VC开源 VC文章 VC工具 VC知道 VC词典 VC论坛.mht",这个单个文件可能是一个MHT(MHTML)文档,它将网页内容包括文字、图片、脚本等元素整合在...
感谢网络前辈的无私分享,再整理一下 WTL 的学习文档。 所有源码都能在 VC6,WTL...7、白乔原创:VC之美化界面篇 8、ComboBox的WTL移植.doc 9、窗口的子类化.docx 10、深入剖析MFC中对于Windows消息处理、运行机制.doc
VC++,全称Visual C++,是微软公司推出的一种面向对象的、运行于Windows平台的集成开发环境,它集成了C++编译器,调试器和其他开发工具,方便开发者进行C++编程。 在"白乔VC++写的小QQ源码"中,我们可以学习到以下...
《标准C++开发入门与编程实践源码》是一本针对初学者和爱好者设计的C++编程书籍,由知名作者白乔编著。本书的核心目的是帮助读者掌握C++语言的基础知识,并通过实际编程项目来加深理解,提升编程技能。在书中,白乔...
微软Visual Studio 2008是一款强大的集成开发环境(IDE),专为软件开发者提供全面的工具和服务,以创建各种应用程序,包括Windows桌面应用、Web应用和移动应用等。这款IDE包含了许多功能,其中之一就是丰富的图片...
自己把分散的章节下载下来合并的PDF,完整版把脉VC++ 由于文件大只能分三部分
内容索引:VC/C++源码,网络相关,仿QQ,聊天 fakeQQ 软件杂志中的完整聊天程序源码,作者是白乔,为《电脑爱好者》合订本准备的示例程序。 特别是对VC++新手特别有用处,通过这个示例程序会了解到VC创建工程的步骤、...
把脉VC++(上半册) 白乔、左飞编著 电子工业出版社
把脉VC++(下半册) 白乔、左飞编著 电子工业出版社
【FakeQQ源代码】是一个由白乔为《电脑爱好者》合订本提供的示例程序,旨在教授初学者如何在VC++环境下进行多种编程技术的实践。这个程序包含了多个关键的知识点,下面将逐一进行详细解释。 首先,**对话框界面编程...
### Jena-HBase:一种分布式、可扩展且高效的RDF三元组存储系统 #### 概述 在当今数据密集型应用环境中,处理大规模RDF(Resource Description Framework)数据集的需求日益增长。传统的单机RDF数据存储解决方案...
oauth2的示例工程源代码,含build好的war包 来源于github,但build会很耗时间 直接取出2个target目录下的war文件 改名为tonr2.war和sparklr2.war 置于webapps下 启动tomcat后,访问...即可体验演示工程
《Jena ARQ 2.9:探索语义网与RDF处理的精髓》 Jena ARQ,作为Apache Jena项目的一部分,是用于构建基于语义网的应用程序的重要工具,特别是涉及到RDF(Resource Description Framework)数据处理的场景。...
spring-security-oauth2下的sparklr2的war包,官方的没有现成的war包,需要使用maven打包,这个是打包好的
类似于ACDSee浏览/查看双界面的Flash动画播放器,方便快捷的播放控制,可以直接在地址栏输入flash动画的URL,可以随意保存本地/远端Flash文件,支持flash多格式转换,支持全屏播放,支持浏览预览;