本文将向您展示Visual Studio 2010中Visual C++新推出的一些功能及增强性特征。
一、Visual C++工程及其构建系统
(一)MSBuild
现在,Visual C++解决方案和项目都使用MSBuild进行构建,从而取代了原来的构建工具VCBUILD.exe。对于其他的Visual Studio语言和项目类型,MSBuild提供了一样的灵活性,可扩展性和基于XML的构建支持工具。为此,Visual C++项目文件现在也使用了流行的XML文件格式,并具有.vcxproj文件扩展名。另外,从早期版本的Visual Studio中提供的项目文件将被自动转换为新的文件格式。有关MSBuild工具的更多信息,请参见文章“MSBuild(Visual C++)”。
(二)VC++目录
现在,VC++目录设置位于两个地方。你可以使用项目属性页来设置每个项目对应的VC++目录,也可以使用属性管理器和一个属性表来设置全局性的并且使每个配置值对应的VC++目录。
(三)工程依赖性
在VC++早期版本中,您可以定义存储在同一个解决方案中的项目之间的依赖性。如今在这些解决方案转换为新的项目文件格式后,相应的依赖性也被转换为项目到项目的引用。这种变化将会影响应用程序,因为解决方案依赖性和项目到项目的引用是不同的。
(四)宏与环境变量
新引入的_ITERATOR_DEBUG_LEVEL宏支持针对迭代器调用调试支持。你可以使用这个宏来代替较老的_SECURE_SCL和_HAS_ITERATOR_DEBUGGING宏。
二、Visual C++库
(一)/analyze警告
绝大多数的/analyze(企业代码分析)警告如今都已经被从CRT,MFC和ATL库中移除。
(二)重启动管理器
如果您的应用系统出现意外关闭或重新启动情况的话,重启管理器支持自动保存文件并重新启动您的应用程序。例如,当您的应用程序由于自动更新而关闭时您可以使用重启管理器来再次启动这个应用程序。欲了解更多有关如何将应用程序配置为使用启动管理器的信息,请参见《如何:添加重启动管理支持》一文。
(三)MFC库
新引入的CTaskDialog类可用于代替标准的AfxMessageBox消息框。CTaskDialog类能够显示和收集比标准的消息框更多的信息。
(四)新的ATL宏
又有新的宏被添加到ATL宏库中,以便进一步扩大原有的PROP_ENTRY_TYPE和PROP_ENTRY_TYPE_EX宏的现有功能。另外新增加的两个宏PROP_ENTRY_INTERFACE和PROP_ENTRY_INTERFACE_EX支持你添加一个有效的CLSID列表。最后一对新宏PROP_ENTRY_INTERFACE_CALLBACK和PROP_ENTRY_INTERFACE_CALLBACK_EX支持您指定一个回调函数,以确定某个CLSID是否是有效的。
(五)新库
新引入的SafeInt库能够确保执行安全的算术运算,从而有效地避免了经常出现的整数溢出问题。这个库还支持比较不同类型的整数。
三、集成开发环境(IDE)
(一)改进的错误智能感知支持
在Visual Studio 2010中,集成开发环境(IDE)支持更好地检测可能导致丢失智能感知支持的错误,并在这些内容下面显示以红色波浪下划线。此外,集成开发环境还支持把智能感知的错误输出到错误列表窗口中。要想观察导致问题的相关代码,你只需要双击错误列表窗口中的错误即可。
(二)#include自动完成特征
集成开发环境还支持#include关键字的自动完成。当您键入#include时,集成开发环境将自动创建一个包含有效的头文件的下拉列表供您选择。如果你继续输入一个文件名,集成开发环境将自动根据您的输入加以过滤。在任何时候,你都可以根据这个列表来选择你想要包括的文件。显然,这一功能可以让您快速地包括那些尚不确切知道文件名的文件。
四、Visual C++编译器和链接器
(一)auto关键字
如今,auto关键字有了新的用处。你可以使用默认的auto关键字来声明一个变量的类型是从此变量声明的初始化表达式中推导出的。而新的/Zc:auto编译器选项支持调用auto关键字的新意义或以前的意义。
(二)decltype操作符
decltype操作符能够返回一个指定表达式的类型。因此,你可以使用decltype操作符并结合使用auto关键字来声明一个复杂类型或者是仅为编译器所知晓的类型。例如,你可以使用这样的组合来声明一个模板函数,而此模板函数的返回类型取决于其模板参数的类型。或者,你还可以声明一个模板函数,而此模板函数调用另一个函数,然后返回被调用函数的返回类型。
(三)Lambda表达式
Lambda函数有一个函数体,但没有函数名。Lambda函数把函数指针和函数对象两者的最佳特性组合到了一起。
你可以使用一个lambda函数来作为模板函数参数以代替一个函数对象,或者联合使用auto关键字来声明一个lambda类型的变量。
控件中国网www.componentcn.com 提示:未完待续