c++ - 反馈: C++ developers who've switched to VS2010?

标签 c++ visual-studio-2008 visual-studio-2010 development-environment

我正在考虑将我们的商店从 VS2008sp1 迁移到 VS2010。我对 2008 年非常满意,但希望在我们的代码中使用 TR1。


我对 2010 年与 2008 年的程序员同行真正感兴趣,而不是对以下任何一个元素的解决方案!


但是,我正在转换我们的项目和解决方案,我发现“噪声与信号”的比率相当蹩脚,IMO。到目前为止,我正在考虑重新连接每个项目,以消除各种明显虚假的 Microsoft Build 警告,例如 $(TargetExt) ...与链接器的 OutputFile 属性值不匹配...

此消息有多种变体,每个项目都有多种变体,我们大约有 75 个项目。我很少或根本不想浪费时间重做所有这些项目的输出目标(显然 MSBuild 坚持要求链接器的目标和编译器的目标相同,这对我们来说既没有必要也不可取)。

另外,[尴尬]我们还是用VSS。就在我最初尝试调整项目以使其符合 MSBuild 的过程中,我发现 VS2010 中的 VSS 界面速度大约是 2008 年的 1/4。这太糟糕了(而且我已经习惯了相对蹩脚的界面)。 VSS 的总体性能)。

叹息...我知道大约 1/2 或更多的“答案”将是“停止使用 VSS”。是的,这是一个好主意,我们可能会在不久的将来转向颠覆。但一次只做一件事。这只能解决 VSS 速度问题,不能解决 MSBuild 问题,也不能解决新的 C++ 问题。

新的标准库和 TR1 内容似乎破坏了我们的一些代码。这本身并不算太令人震惊——如果情况并非如此,我会感到惊讶。但就目前情况而言,错误消息是 LOOOONNNNNGGGG - 它让我想起了我早期尝试使用 STL 的日子,并且必须加载一个错误字符串解析器帮助程序,该帮助程序为我推导出更高级别的名称,以便错误消息可能变得有点有用。现在,十年后,我再次看到诊断如此深入和复杂,以至于毫无意义,我不知道真正的问题是什么。在一种情况下,我尝试在多重映射中插入一个新元素:

typedef CCimexDataSource::CategoryID                        CategoryID;
typedef std::multimap<CString, CCimexDataSource *>          description_sources_multimap;
typedef std::map<CategoryID, description_sources_multimap>  category_sources_map;
// attempt to insert a new description->CCimexDataSource* keyed by CategoryID (an unsigned)
m_category_sources_map[it->GetCategory()].insert(std::make_pair(it->GetDescription(), &(*it)));

我得到:

1>c:\program files (x86)\microsoft visual studio 10.0\vc\include\utility(163): error C2440: 'initializing' : cannot convert from 'const CCimexDataSource *' to 'CCimexDataSource *'
1>          Conversion loses qualifiers
1>          c:\program files (x86)\microsoft visual studio 10.0\vc\include\utility(255) : see reference to function template instantiation 'std::_Pair_base<_Ty1,_Ty2>::_Pair_base<_Ty,const CCimexDataSource>(_Other1 &&,_Other2 &&)' being compiled
1>          with
1>          [
1>              _Ty1=const CString,
1>              _Ty2=CCimexDataSource *,
1>              _Ty=ATL::CStringT<char,StrTraitMFC<char>>,
1>              _Other1=ATL::CStringT<char,StrTraitMFC<char>>,
1>              _Other2=const CCimexDataSource *
1>          ]
1>          c:\program files (x86)\microsoft visual studio 10.0\vc\include\xmemory(208) : see reference to function template instantiation 'std::pair<_Ty1,_Ty2>::pair<ATL::CStringT<BaseType,StringTraits>,const CCimexDataSource*>(std::pair<ATL::CStringT<BaseType,StringTraits>,const CCimexDataSource *> &&)' being compiled
1>          with
1>          [
1>              _Ty1=const CString,
1>              _Ty2=CCimexDataSource *,
1>              BaseType=char,
1>              StringTraits=StrTraitMFC<char>
1>          ]
1>          c:\program files (x86)\microsoft visual studio 10.0\vc\include\xmemory(280) : see reference to function template instantiation 'void std::allocator<_Ty>::construct<std::pair<_Ty1,_Ty2>>(std::pair<const _Kty,CCimexDataSource> *,_Other &&)' being compiled
1>          with
1>          [
1>              _Ty=std::pair<const CString,CCimexDataSource *>,
1>              _Ty1=ATL::CStringT<char,StrTraitMFC<char>>,
1>              _Ty2=const CCimexDataSource *,
1>              _Kty=CString,
1>              _Other=std::pair<ATL::CStringT<char,StrTraitMFC<char>>,const CCimexDataSource *>
1>          ]
1>          c:\program files (x86)\microsoft visual studio 10.0\vc\include\xtree(592) : see reference to function template instantiation 'void std::_Cons_val<std::allocator<_Ty>,_Ty,std::pair<_Ty1,_Ty2>>(_Alloc &,std::pair<const _Kty,CCimexDataSource> *,std::pair<_Ty1,_Ty2> &&)' being compiled
1>          with
1>          [
1>              _Ty=std::pair<const CString,CCimexDataSource *>,
1>              _Ty1=ATL::CStringT<char,StrTraitMFC<char>>,
1>              _Ty2=const CCimexDataSource *,
1>              _Alloc=std::allocator<std::pair<const CString,CCimexDataSource *>>,
1>              _Kty=CString
1>          ]
1>          c:\program files (x86)\microsoft visual studio 10.0\vc\include\xtree(755) : see reference to function template instantiation 'std::_Tree_nod<_Traits>::_Node *std::_Tree_val<_Traits>::_Buynode<_Ty>(_Valty &&)' being compiled
1>          with
1>          [
1>              _Traits=std::_Tmap_traits<CString,CCimexDataSource *,std::less<CString>,std::allocator<std::pair<const CString,CCimexDataSource *>>,true>,
1>              _Ty=std::pair<ATL::CStringT<char,StrTraitMFC<char>>,const CCimexDataSource *>,
1>              _Valty=std::pair<ATL::CStringT<char,StrTraitMFC<char>>,const CCimexDataSource *>
1>          ]
1>          c:\program files (x86)\microsoft visual studio 10.0\vc\include\map(364) : see reference to function template instantiation 'std::pair<_Ty1,_Ty2> std::_Tree<_Traits>::insert<_Ty>(_Valty &&)' being compiled
1>          with
1>          [
1>              _Ty1=std::_Tree_iterator<std::_Tree_val<std::_Tmap_traits<CString,CCimexDataSource *,std::less<CString>,std::allocator<std::pair<const CString,CCimexDataSource *>>,true>>>,
1>              _Ty2=bool,
1>              _Traits=std::_Tmap_traits<CString,CCimexDataSource *,std::less<CString>,std::allocator<std::pair<const CString,CCimexDataSource *>>,true>,
1>              _Ty=std::pair<ATL::CStringT<char,StrTraitMFC<char>>,const CCimexDataSource *>,
1>              _Valty=std::pair<ATL::CStringT<char,StrTraitMFC<char>>,const CCimexDataSource *>
1>          ]
1>          c:\users\steve\projects\cimex cad-cam\14.0\cimex application\cimcad\formaddautomaticpage.h(17) : see reference to function template instantiation 'std::_Tree_iterator<_Mytree> std::multimap<_Kty,_Ty>::insert<std::pair<_Ty1,_Ty2>>(_Valty &&)' being compiled
1>          with
1>          [
1>              _Mytree=std::_Tree_val<std::_Tmap_traits<CString,CCimexDataSource *,std::less<CString>,std::allocator<std::pair<const CString,CCimexDataSource *>>,true>>,
1>              _Kty=CString,
1>              _Ty=CCimexDataSource *,
1>              _Ty1=ATL::CStringT<char,StrTraitMFC<char>>,
1>              _Ty2=const CCimexDataSource *,
1>              _Valty=std::pair<ATL::CStringT<char,StrTraitMFC<char>>,const CCimexDataSource *>
1>          ]
1>c:\program files (x86)\microsoft visual studio 10.0\vc\include\utility(163): error C2439: 'std::_Pair_base<_Ty1,_Ty2>::second' : member could not be initialized
1>          with
1>          [
1>              _Ty1=const CString,
1>              _Ty2=CCimexDataSource *
1>          ]
1>          c:\program files (x86)\microsoft visual studio 10.0\vc\include\utility(167) : see declaration of 'std::_Pair_base<_Ty1,_Ty2>::second'
1>          with
1>          [
1>              _Ty1=const CString,
1>              _Ty2=CCimexDataSource *
1>          ]

注意:上面的内容似乎是 std::set<> 工作方式的改变,因此它们总是返回 const_iterators 而不是 iterators(1)。但重点只是提供一个示例,说明与 2008 年相比,编译器诊断要复杂得多。


所以,我的问题是:对于最近进行转换的任何 C++ 商店:您对转换感到遗憾还是感激?怎么会这样?

(1) Scott Meyer 的“Effective STL”,(c) 2001,第 95 页,第 22 项。

我刚刚遇到了这个:它涵盖了我遇到的许多代码破坏性更改: http://blogs.msdn.com/b/vcblog/archive/2009/05/25/stl-breaking-changes-in-visual-studio-2010-beta-1.aspx?wa=wsignin1.0

最佳答案

回答您的第一个问题:&(*it) 的类型可能是 const CCimexDataSource *,而不是 CCimexDataSource *

就您的第二个讨论问题提供意见: 我们已经从 VS2008 转换到 VS2010,效果很好,虽然 VS2010 速度较慢,但​​它具有更好的智能感知。转换不是全自动的,之后我们必须手动更新 vcxproj 文件。

关于c++ - 反馈: C++ developers who've switched to VS2010?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4587418/

相关文章:

c# - 在 visual studio c# windows 窗体中使用 JavaScript

c++ - 为什么指向 char 数组的指针必须需要 strcpy 才能将字符分配给它的数组,而双引号分配不起作用?

c++ - 间隔树 - 主要功能障碍的功能

C++内存对齐问题

c# - Visual Studio : reset user settings when debugging

c++ - 配置文件应该放在哪里?

c++ - 将 std::result_of<> 用于成员类型的成员方法

c# - 不接受 TableAdapter 中的参数

c++ - 尝试使用 crypto++ 编译我的项目时出现错误 C2711

visual-studio-2010 - Entity Framework 不创建数据库