VS2015 SP3 C ++运行时是否与SP2 C ++运行时兼容?

时间:2017-02-07 10:47:41

标签: c++ visual-studio-2015

我们有不同的团队安装了不同版本的VS2015。有些已安装2015 SP2,其他VS2015 SP3已安装。

我想知道这些服务包提供的C ++运行时是否兼容。即:

  • 我可以使用VS2015 SP2 dll运行VS2015 SP3 C ++可执行文件(传递C ++对象)吗?
  • 反之亦然:我可以使用VS2015 SP3 dll运行VS2015 SP2 C ++可执行文件(传递C ++对象)吗?

我无法找到有关兼容性的任何信息......

1 个答案:

答案 0 :(得分:0)

没有Visual Studio 2015 Service Pack 2或3.您可能正在谈论:Visual Studio 2015 Update 2Visual Studio 2015 Update 3

所以我相信你的问题应该被翻译出来:

Visual Studio 2015 Update 3是否对C ++标准对象进行了更改?

您可以在此处找到对C ++编译器所做更改的列表:https://www.visualstudio.com/en-us/news/releasenotes/vs2015-update3-vs#visualcpp

您的问题特别关注标准库的更改,这些库列在此处:

  
      
  • 我们在破坏Update 2中回归的普通对象范围时恢复了调试模式的性能,就像在vector中一样。
  •   
  • 我们已经从提案P0185添加[nothrow-]可交换特征的C ++ 17工作文件中实现了可交换特征。作为推测性的C ++ 17特性,特征(is_swappableis_swappable_withis_nothrow_swappableis_nothrow_swappable_with)仅可见,并且std::swap上的约束只有在使用/ std:c ++ latest编译时才有效。
  •   
  • 我们已从vcruntime140.dll和先前在进程启动期间触发的静态库中移除了ETW事件调用,并且dllmain。
  •   
  • 新我们删除了STL容器使用的常用机器中的符号名称长度,例如std::vector,减少了C4503警告的可能性。例如,以下类型不再生成警告:concurrency::concurrent_unordered_map<>>>>
  •   

最后一个项目符号表示C ++对象内部的符号命名已更改。这意味着在一个Update创建的对象中,符号名称不一定与另一个更新所期望的符号名称一致。所以你的问题的答案是:不,版本之间的对象符号命名发生了变化。它们不再保证兼容。

此外,I've definitely wasted a tremendous amount of time试图弄清楚为什么在一段代码中有效的东西在另一段代码中没有,对我而言,这只是对次要更新。根据我的经验,我会恳请您:让您的整个团队保持完全相同的Visual C ++版本。如果你没有2件事中的一件会发生:

  1. 您将拥有始终对版本差异持怀疑态度的团队成员。如果他们期望工作的东西没有,他们会觉得有必要在其他版本的Visual C ++上尝试它。更糟糕的是,如果在其他版本的Visual C ++中使用,他们可能会觉得需要确保支持他们的代码。你会在这里经历缓慢而稳定的时间。
  2. 您将拥有使用 版本之间更改功能的团队成员。但他们不承认版本变化是罪魁祸首。这个问题将花费过高的时间量,因为识别错误将非常困难。
  3. 总结正确的答案是:让您的整个团队使用固定版本的Visual Studio,并且不会一直担心您的头脑或脑袋。 < / p>