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中的do
在haskell中,有一个do的语句专门用来做一些不那么“干净”的事情,比如读写都需要用do来开头 一开始以为do的作用是做monad,后来发现是错误的,其实do做的事情是包裹一个顺序操作 比如在如下 ...
- 安装Tomcat服务器
一.首先,下载Tomcat,你可以直接百度Tomcat官网, 或者,直接在地址栏输入他的官网地址:http://tomcat.apache.org/,然后进入他的主页,在主页左侧可以找到Downloa ...
- SQL Server锁分区特性引发死锁解析
锁分区技术使得SQL Server可以更好地应对并发情形,但也有可能带来负面影响,这里通过实例为大家介绍,分析由于锁分区造成的死锁情形. 前段时间园友@JentleWang在我的博客锁分区提升并发,以 ...
- Winform(C#.NET)自动更新组件的使用及部分功能实现(一点改进功能)
接前两篇继续: Winform(C#.NET)自动更新组件的使用及部分功能实现 Winform(C#.NET)自动更新组件的使用及部分功能实现(续) 借鉴文章:http://www.cnblogs.c ...
- asp.net froms 移动平台(iphone 微信)无法存储的解决办法。
更改form的默认设置,让系统不再根据设备来判断是否支持cookie 在站点的配置文件中有关于Form认证的配置,在配置<authentication mode="Forms" ...
- [WinAPI] API 13 [遍历指定目录 打印文件和其他属性]
Windows API中,有一组专门的函数和结构,用于遍历目录,它们是FindFirstFile函数.FindNextFile函数和WIN32_FIND_DATA结构.使用FindFirstFile和 ...
- [ACM_图论] Fire Net (ZOJ 1002 带障碍棋盘布炮,互不攻击最大数量)
Suppose that we have a square city with straight streets. A map of a city is a square board with n ...
- 成功安装mysql后,为何服务管理器里找不到MYSQL服务名
1.打开cmd,切换到mysql的bin目录下 2. D:\Program Files\MySQL5.1\bin>mysqld.exe -installService successfully ...
- JS获取元素CSS值的各种方法分析
先来看一个实例:如何获取一个没有设置大小的字体? <!DOCTYPE html> <html lang="en"> <head> <met ...
- paip.sqlite 管理最好的工具 SQLite Expert 最佳实践总结
paip.sqlite 管理最好的工具 SQLite Expert 最佳实践总结 一般的管理工具斗可以...就是要是sqlite没正常地关闭哈,有shm跟wal文件..例如ff的place.sqlit ...