VC 2010的重大变化
auto 关键字具有新的默认含义。由于使用旧含义的情况很少见,因此大多数应用程序都不会受此更改影响。
引入了新的 static_assert 关键字,如果代码中已经存在具有某个名称的标识符,则此关键字将导致名称冲突。
对新 lambda 表示法的支持不支持对 IDL uuid 特性中未加引号的 GUID 进行编码。
.NET Framework 4 引入了损坏状态异常概念,这些异常会导致进程处于无法恢复的损坏状态。默认情况下,即使使用捕获所有其他异常的 /EHa 编译器选项,也无法捕获损坏状态异常。
若要显式捕获损坏的状态异常,请使用 __try-__except 语句。或者,应用 [HandledProcessCorruptedStateExceptions] 特性以允许使用函数捕获损坏状态异常。
此更改主要影响可能必须捕获损坏状态异常的系统程序员。八个此类异常为 STATUS_ACCESS_VIOLATION、STATUS_STACK_OVERFLOW、EXCEPTION_ILLEGAL_INSTRUCTION、EXCEPTION_IN_PAGE_ERROR、EXCEPTION_INVALID_DISPOSITION、EXCEPTION_NONCONTINUABLE_EXCEPTION、EXCEPTION_PRIV_INSTRUCTION 和 STATUS_UNWIND_CONSOLIDATE。有关这些异常的更多信息,请参见 GetExceptionCode 宏。
修改后的 /GS 编译器选项可防止此版本中的缓冲区溢出比早期版本中的更广泛。此版本可能会在可降低性能的堆栈中插入附加的安全检查。使用新 __declspec(safebuffers) 关键字可指示编译器不对特定函数插入安全检查。
如果使用 /GL(全程序优化)和 /clr(公共语言运行时编译)编译器选项进行编译,则忽略 /GL 选项。进行此更改是因为组合使用编译器选项没有什么优点。进行此更改后,生成的性能得到了改进。
默认情况下,在 Visual C++ 2010 中禁用对三字符组的支持。使用 /Zc:trigraphs 编译器选项可启用三字符组支持。三字符组由两个连续的问号(“??”)及后跟的第三个唯一字符组成。编译器会将三字符组替换为相应的标点字符。例如,编译器会将“??=??三字符组替换为“#”字符。对于使用的字符集未包含某些标点字符的便捷图形表示形式的 C 源文件,可在其中使用三字符组。
链接器不再支持对 Windows 98 进行优化。如果指定 /OPT:WIN98 或 /OPT:NOWIN98,则 /OPT(优化)选项将会产生编译时错误。
由“RuntimeLibrary”和“DebugInformationFormat”生成系统属性指定的默认编译器选项已发生更改。默认情况下,在由从 7.0 到 10.0 版本的 Visual C++ 创建的项目中将会指定这些生成属性。 如果迁移由 Visual C++ 6.0 创建的项目,请考虑是否为这些属性指定值。
在 Visual C++ 2010 中,“RuntimeLibrary”设置为“MultiThreaded (/MD)”,“DebugInformationFormat”设置为“ProgramDatabase (/Zi)”。在 Visual C++ 9.0 中,“RuntimeLibrary”设置为“MultiThreaded (/MT)”,“DebugInformationFormat”设置为“Disabled”。
公共语言运行时 (CLR)
Microsoft C# 和 Visual Basic 编译器现在可以生成“非主互操作程序集”(非 PIA)。非 PIA 程序集可以使用 COM 类型而无须部署相关主互操作程序集 (PIA)。使用由 Visual C# 或 Visual Basic 生成的非 PIA 程序集时,在引用使用库的任何非 PIA 程序集之前,必须在编译命令中引用 PIA 程序集。
Visual C++ 项目和 MSBuild
Visual C++ 项目现在基于 MSBuild 工具。因此,项目文件会使用新 XML 文件格式和 .vcxproj 文件后缀。Visual C++ 2010 会自动将项目文件从 Visual Studio 早期版本转换为新文件格式。
如果某个现有项目依赖于先前的生成工具 VCBUILD.exe 或项目文件后缀 .vcproj,该项目将受影响。
在早期版本中,Visual C++ 支持属性表的后期计算。例如,父属性表可以导入子属性表,然后父属性表可以使用子属性表中定义的变量来定义其他变量。利用后期计算,即使在导入子属性表之前,父属性表也可以使用子变量。在 Visual C++ 2010 中,不能在定义项目表变量之前使用该变量,因为 MSBuild 仅支持早期计算。
集成开发环境
“应用程序终止”对话框不再终止应用程序。
在以前的版本中,当 abort() 或 terminate() 函数关闭应用程序的零售内部版本时,C 运行库将在控制台窗口或对话框中显示应用程序终止消息。该消息的部分内容为,“此应用程序已请求运行时以异常方式终止它。请与应用程序技术支持团队联系,以便获得更多信息。”
应用程序终止消息是多余的,因为 Windows 随后显示了当前终止处理程序,它通常是“Windows 错误报告”(Dr.Watson) 对话框或 Visual Studio 调试器。从 Visual Studio 2010 开始,C 运行库将不显示该消息。而且,运行时还将阻止应用程序在调试器启动前终止。
仅当您依赖于应用程序终止消息的以前行为时,才会进行此重大更改。
对于 Visual Studio 2010 具体而言,IntelliSense 无法用于 C++/CLI 代码或特性,“查找所有引用”无法用于本地变量,且代码模型不会从导入的程序集检索类型名称或者将类型解析为其完全限定名。
Visual C++ 库
SafeInt 类现在包括在 Visual C++ 中,不再需要单独下载。仅当您开发了一个也称为“SafeInt”的类时,才会进行此重大更改。
库部署模型不再基于“合成”机制,且不再使用清单。实际上,每个动态链接库的名称包含其版本号。
标准模板库
标头不再自动包含在许多其他头文件中。但是,如果您需要 标头中定义的独立迭代器支持,则会显式包含该标头。
在 标头中,移除了 checked_* 和 unchecked_* 函数。此外还在 标头中,移除了 checked_iterator 类并增加了 unchecked_array_iterator 类。
移除了 CComPtr::CComPtr(int) 构造函数。该构造函数允许从 NULL 宏构造 CComPtr 对象,但不是必需的,还允许从非零整数构造无意义结构。
CComPtr 仍可从定义为 0 的 NULL 进行构造,但如果从文本 0 以外的整数构造,则会失败。您最可能在以下伪代码描述的情况中遇到此问题。
复制
pair> myVar;
myVar = make_pair(x, NULL);
若要修复第二个语句,请使用 nullptr 关键字来替代 NULL 宏。
复制
myVar = make_pair(x, nullptr)
移除了以下 ctype 成员函数:ctype::_Do_narrow_s、ctype::_Do_widen_s、ctype::_narrow_s 和 ctype::_widen_s。如果应用程序使用上述任一成员函数,则必须将其替换为对应的非安全版本:ctype::do_narrow、ctype::do_widen、ctype::narrow 或 ctype::widen。
CRT、MFC 和 ATL 库
已移除用户支持,以生成 CRT、MFC 和 ATL 库。例如,未提供相应的 nmake 文件。但是,用户仍对这些库的源代码具有访问权限。并且将可能在 Visual C++ 团队博客中发表一篇文档,其中描述 Microsoft 用来生成这些库的 MSBuild 选项。
已移除对 IA64 的 MFC 支持。但是,仍提供对 IA64 的 CRT 和 ATL 支持。
MFC 模块定义 (.def) 文件中不再重用序号。此更改意味着,次要版本间的序号将相同,且 Service Pack 和快速修补工程版本的二进制兼容性将得到改进。
CDocTemplate 类中添加了一个新的虚函数。这一新的虚函数为 CDocTemplate::OpenDocumentFile。OpenDocumentFile 的早期版本具有两个参数。而新版本具有三个参数。若要支持重新启动管理器,派生自 CDocTemplate 的任何类都必须实现具有三个参数的版本。有关此函数的更多信息,请参见 CDocTemplate::OpenDocumentFile。新参数为 bAddToMRU。
宏和环境变量
不再支持环境变量 __MSVCRT_HEAP_SELECT。已移除此环境变量,且没有替换变量。
Microsoft Macro Assembler Reference
从 Microsoft Macro Assembler 编译器中移除了多个指令。移除的指令包括 .186、.286、.286P、.287、.8086、.8087 和 .NO87。
VC 2010的重大变化的更多相关文章
- VC++2010下编译STLport,Boost
VC++2010下编译STLport,Boost 最近在想向Boost转移,努力掌握Boost代码的过程中, STLport版本:5.2.1 Boost版本:1.4.6.1 (1.4.7.0也OK) ...
- VC++2010配置使用MySQL5.6
0.前提 安装后的文件概览 编译器: VC++2010 MySQL版本:MySQL5.6.19 for win64 Connector版本:connector c++ 1.1.3 在VS2010 ...
- VC#2010 视图设计器无法打开 问题的正解
继上次VC#2010中视图设计器无法打开的问题的讨论后,我感觉每次都重新安装一次安装包未免也太麻烦了,程序员的时间都灰常宝贵. 所以在这次人工智能作业的时候,找到了一个简单的途径: 打开VC#2010 ...
- Systemc在VC++2010安装方法及如何在VC++2010运行Noxim模拟器
Systemc在VC++2010的安装方法可以参考文档"Systemc with Microsoft Visual Studio 2008.pdf".本文档可以在"htt ...
- VC++2010组件安装失败解决办法
安装SQLSERVER时,安装不上,总是报错说 VC++2010组件安装错误. 单独安装时,也会报出严重错误无法安装.就是下面这两个 最后到网上找到一个办法解决了:如下: 下载这个软件 Microso ...
- Installshield 2010 中集成. Net framework4 与 vc++ 2010运行安装包
1.prq的地址,通过以下地址,下载相应的prq文件 VC 2010 redist X86: http://saturn.installshield.com/is/prerequisites/micr ...
- 配置VC++2010的glut库
VC++2010是一个成熟稳定的版本,微软的编译工具Visual Studio系列从VC6到如今的VC2019,功能非常强大,我们在开始学习C++和计算机图形学的时候,一般入手<<C++P ...
- VC++ 2010 创建高级Ribbon界面详解(1)
运用 VC++ 2010 创建高级 Ribbon 界面详解,包括 Ribbon 界面的结构层次.Ribbon 控件的使用等,ribbon 用户界面,ribbon interface ,ribbon 高 ...
- VC 2010 Express 学生版(中文版)
Microsoft Visual C++ 2010 Express 学生版 下载传送门(提取码:r7sm) 如何安装 拿到压缩文件后,解压到桌面(别怕,安装完后这个文件夹是可以删除的). 在 &quo ...
随机推荐
- haskell debug
最近在学习haskell这门神奇的语言,但是由于print不方便,程序出错的时候都不知道是怎么回事.网上搜了一把发现有这么一个好东西 import Debug.Trace funct :: Integ ...
- 第12周&第13周
12&13:STL Standard Template Library sort, binary_search/lower_bound/upper_bound, multiset, set, ...
- C#函数式编程之标准高阶函数
何为高阶函数 大家可能对这个名词并不熟悉,但是这个名词所表达的事物却是我们经常使用到的.只要我们的函数的参数能够接收函数,或者函数能够返回函数,当然动态生成的也包括在内.那么我们就将这类函数叫做高阶函 ...
- java web图片显示到浏览器
今天研究了一下午,图片显示问题. jsp中获取绝对路径的方法:String contextPath = request.getContextPath();String path = request.g ...
- atitit。自定义uml MOF EMF体系eclipse emf 教程o7t
atitit.自定义uml MOF EMF体系eclipse emf 教程o7t 1. 元对象机制(MOF,Meta-Object Facility)and 结构 1 2. 元模型图.模型图.对象 ...
- JSTL核心标签库使用
JSTL是什么? java standard taglib(java标准标签库). 标签是什么? sun公司制订的一种技术规范,用来将jsp页面中的java代码使用类似于html当中的标记来替换 的一 ...
- GEF - 制作一个简单图形化编辑框架笔记1
在首先来看看GEF是什么,GEF的全称是Graphical Editing Framework,图形化框架,可以利用此框架做图形化编.他的基本原理是采用MVC开发模式. 以下是一些例子 GEF里面包含 ...
- Struts2入门1 Struts2基础知识
Struts2入门1 Struts2基础知识 20131130 代码下载: 链接: http://pan.baidu.com/s/11mYG1 密码: aua5 前言: 之前学习了Spring和Hib ...
- 如何处理Android SDK无法更新问题?
在Android开发中,最痛苦的事情就是相关库升级后,Android SDK太低,跑步起来,最最痛苦的事情就是,想更新,却因大天朝的一墙之隔,愣是没法更新.遇到这种情况怎么办呢?小编和大家分享一个解决 ...
- python None与Null
一.Python对象 要理解这个,首先要理解Python对象: python对象具有三个特性:身份.类型.值. 三特性在对象创建时被赋值.只有值可以改变,其他只读. 类型本身也是对象. 二.Null与 ...