飘云阁

 找回密码
 加入我们

QQ登录

只需一步,快速开始

查看: 2958|回复: 0

Visual C++ 2010新体验

[复制链接]
  • TA的每日心情
    慵懒
    2019-3-12 17:25
  • 签到天数: 3 天

    [LV.2]偶尔看看I

    发表于 2010-9-8 17:45:11 | 显示全部楼层 |阅读模式
    在98年推出具有里程碑意义的Visual Studio 6.0之后,好日子没过多久,微软在企业应用开发领域便面临尴尬,其C/S模式解决方案Visual Basic + Visual C++遭受“功能全内置”的Borland Delphi的严重冲击,其B/S解决方案ASP + ActiveX与Java网页开发技术相比难登大雅之堂。后一点尤其让微软头疼,稍有头脑的人都能看出企业应用互联网化(网页化)已经势不可挡。在这种腹背受敌的紧急情况下,微软启动了.NET战略。比尔•盖茨从Borland挖走了Delphi架构师Anders Hejlsberg(后来的C#语言设计师),在狙击了Java的同时也重创了Delphi,可谓一箭双雕。
    .NET成败事关微软生死,微软全力以赴,无暇他顾。鉴于在Windows平台上Visual C++ 的优势地位一时无人能敌,且C++新标准一再难产,因此微软没有动力同时也很难对C++做些什么,结果,从Visual Studio .NET一直到Visual Studio 2008,微软对Visual C++的本地应用(非托管应用)开发能力的升级基本是虚应故事。其间,微软在Visual C++上投入的精力主要是让C++访问.NET设施以及与其他.NET语言交互。在最初推出的Managed C++大获全败后,Herb Sutter入主Visual C++团队,担任C++/CLI架构师,目的仍然是为C++访问.NET提供通道,而非对C++本身的改进。随着.NET平台不断发展壮大,逐渐占据企业应用开发半壁江山,微软已经度过了.NET发展的焦躁期,终于能腾出手来重振Visual C++。
    2010年2月10日,微软发布了Visual Studio 2010发布候选版,预示着Visual Studio 2010正式版的发布已进入读秒阶段。在发布候选版中,从丰乳肥臀般的启动画面,到体贴入微、近乎献媚的源代码编辑器,都表明微软对软件用户体验的理解又上了一个档次。Visual Studio 2010毫无疑问具备秒杀微软阵营开发人员的魅力。无论是Windows、Office、Web、移动智能设备应用开发,还是并行计算、云计算应用开发,都得到了增强甚至崭新的支持。对于C++的新增支持则是微软营销Visual Studio 2010时有意无意都要提及的一点。
    在Visual Studio 2010中,微软从语言、库、编译器以及IDE等多方面增强了C++应用开发能力,篇幅所限,在此仅罗列一些主要的新功能和新特性。首先,在语言方面,Visual Studio 2010提前支持如下“C++11”标准(即此前所谓的C++0x标准。据可靠情报,下一代C++标准将于2011年发布……)特性:
    * static_assert关键字:编译期断言。若断言失败,则编译失败并产生编译期错误诊断消息。
    * auto关键字:该关键字被赋予新含义,默认用于自动类型推导,即从变量声明表达式(或初始化表达式)中推导其类型。在模板编程中,auto可以有效地简化编码且避免出错。程序员在Visual Studio 2010中可以使用/Zc:auto编译选项在auto关键字的新旧含义之间进行切换。
    * decltype关键字:用于返回指定表达式的类型。在与auto关键字结合使用时,可以为模板编程提供极大的方便。程序员可以声明只有编译器才知道的类型,例如,可以声明返回类型依赖于其模板实参类型的函数模板。
    * nullptr关键字:一个专门的空指针值,表示一个指针变量或对象句柄不指向任何对象。
    * 右值引用:利用右值引用声明符(&&)可以将一个引用声明为右值。右值引用能够解决C++中因不必要的临时对象创建所导致的效率问题,允许程序员使用移动(move)语义和完美转发(perfect forwarding)编写更加高效的代码。
    * Lambda表达式:类似于匿名函数,兼具函数指针和函数对象之优点同时消除了二者之缺点。它比函数指针灵活且可以维持状态,又不像函数对象那样需要进行明确的类定义。程序员可以使用lambda函数取代函数对象作为函数模板的实参,还可以结合使用auto关键字将变量类型声明为lambda。
    在库方面,Visual Studio 2010除了对STL、ATL、MFC等库进行修补和完善外,还新增了一些库,比较重要的特性如下:
    * PPL(Parallel Pattern Library,并行模式库):在已经到来的多核CPU时代,PPL为C++程序员编写并行计算代码提供了方便。PPL由并行算法、并行容器和任务并行机制组成。并行算法是一组并行处理数据集合的泛型算法;并行容器是一种泛型容器,提供了并行访问元素的能力;任务并行机制则提供了并行执行多任务的机制。
    * CTaskDialog类:MFC的一个新增特性。利用CTaskDialog而不是AfxMessageBox创建的消息框可以向用户显示更丰富的信息。
    * 重启管理器(Restart Manager):可以为软件提供灾难恢复功能。当应用程序意外关闭或重启时,重启管理器可以用于自动保存文档并重启应用,当应用程序被自动更新时,也可以使用重启管理器启动应用。在创建MFC应用时,程序员可以利用向导也可以手工为应用程序添加该项功能。
    * SafeInt库:用于各种类型的整数算术运算,可以自动侦测运算过程中可能发生的整数溢出或除零错误。
    对于大多数C++程序员而言,Visual Studio 2010对IDE的增强可能比对语言和库的增强更有吸引力。强大、友好的IDE能够极大地提高程序员的开发效率,缩短软件产品的开发周期。采用了WPF技术开发的Visual C++ 2010 IDE新增了大量的新特性,例如:
    * 头文件包含指令自动完成功能:当键入 #include时,IDE会创建一个头文件下拉列表以供选择,该列表可以随程序员的键入不断筛选列表项。这样,即使程序员记不清头文件的全名也可以迅速地包含所需的头文件(例如对编程新手而言难于记忆的标准头“algorithm”)。
    * 改良的智能感知错误信息:IDE可以更好地侦测可能导致丧失智能感知功能的错误,并在出错代码下面显示红色的波浪线,同时将智能感知错误信息显示在错误列表窗口中。程序员双击错误列表窗口的错误信息行就可以定位到出错代码。
    * MFC类向导重装上阵:对于MFC程序员来说绝对是一个好消息,该向导可以方便地创建类、消息和变量等,而无需手工修改各个代码文件。
    以下是笔者个人喜欢的两个小功能,由Visual Studio 2010 IDE提供,并非仅针对Visual C++:
    * 文本编辑区缩放:既支持Ctrl+鼠标滚轮无级缩放,也可利用左下角的下拉框缩放。该功能简单、实用。不仅便于演示和交流,也便于开发者迅速定位到指定代码。
    * 调用层次窗口:通过该窗口可以方便地查看函数和成员函数的调用关系。
    另外,Visual Studio 2010支持多显示器,即可以将IDE中的多个窗口浮动显示在不同的显示器上。虽然不知道究竟会有多少程序员使用这个功能,不过显然这个功能很有趣,至少可以让程序员干活时显得更有范儿。
    还有一些其他方面的改进。例如在项目构建方面,Visual C++ 2010解决方案和项目改用MSBuild(而不是VCBUILD)进行构建。MSBuild是一种基于XML的构建工具,具有更大的灵活性和更好的扩展性,至此,MSBuild真正成了Visual Studio所有语言类型的项目的通用构建工具。此外,Visual C++ 2010在编译器、连接器以及辅助工具等方面也做了一些完善。
    不过,令人遗憾的是,Visual Studio 2010仍未像对C#那样直接提供对C++代码的重构支持,仍然需要辅以Visual Assist X这样的第三方插件。按照道理讲,以微软的资源提供对C++代码的重构功能并非难事,收购Visual Assist X不能说易如反掌,至少不差钱,但微软并没有这么做,或者说没有把事情做绝,虽然有它自己的考虑,但仍然让人感到一丝不爽。
    Visual C++ 2010能有今天,Herb Sutter功不可没,其人智商和情商都高人一筹(在程序员这个群体,技术能力强的情商往往比较低,反之亦然),十几年来一直身居ISO C++标准化委员会要职。作为Visual C++小组(C++/CLI)架构师,Herb Sutter不但竭力消除Managed C++一败涂地给Visual C++造成的负面影响,而且确保了Visual C++ 2010不犯方向性错误。不过,从公开的文献看,Visual C++ 2010只是小心翼翼地加入了一小部分必然会进入“C++11”标准的新特性,虽然此举无可厚非,但在新标准正式出台之前,微软其实可以做更多的事。可以想象,随着“C++11”标准的发布,在下一个版本的Visual Studio发布时,微软必然会大肆渲染对C++的新增支持。

    荣耀 2010

    www.royaloo.com
    PYG19周年生日快乐!
    您需要登录后才可以回帖 登录 | 加入我们

    本版积分规则

    快速回复 返回顶部 返回列表