反馈:已切换到VS2010的C ++开发人员?

时间:2011-01-03 19:05:12

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

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


我真的对2010 v。2008的程序员格式塔感兴趣,而不是以下任何一个元素的解决方案!


但是,我正在转换我们的项目&解决方案,我发现“噪音与信号”的比率相当低,IMO。到目前为止,我正在考虑重新布线每个项目,以摆脱各种明显虚假的Microsoft Build警告,例如$(TargetExt)......与Linker的OutputFile属性值不匹配......

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

另外,[尴尬],我们仍然使用VSS。在我最初的尝试按摩项目以符合MSBuild的情况下,我发现VS2010中的VSS接口速度是2008年的1/4。这是非常糟糕的(我已经习惯了相对蹩脚一般来说VSS的表现。)

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

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

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&lt;&gt;的变化工作,这样他们总是返回const_iterators而不是迭代器(1)。但关键是要举例说明编译器诊断与2008年相比有多复杂。


所以,我的问题是:对于那些最近转换过的c ++商店:您是后悔转换还是欣赏它?怎么样?

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

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

4 个答案:

答案 0 :(得分:2)

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

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

答案 1 :(得分:1)

在工作中,我们从VS2005移至VS2010没有任何问题。但是,我发现在我的家用电脑上,我不得不关闭VS2010中的许多Intellisense功能,因为它在我的笔记本电脑上消耗了如此多的处理能力,我只能在不得不等待之前一次输入几个字符它有3分钟更新数据库。如果您在Windows 7上运行相当新的机器(四核~3 GHz,内存至少为6 GB),则应该没有什么性能问题。如果你(就像我在家里一样),在XP上使用带有2 GB RAM的Core2 Duo,你会发现必须关闭IDE的许多功能才有用。

注意:VS2008在我的笔记本电脑上跑得很好;当我“升级”时,我感到非常失望。

答案 2 :(得分:1)

我家用PC(Core2Duo E6600,2 GB RAM)上的智能感知没问题。我唯一不喜欢的是UI的响应性。这非常缓慢。

我相信TR1和C ++ 0x的改进超过了缓慢UI的缺点。

答案 3 :(得分:1)

我尝试用100个项目转换我们的解决方案(VS2005),在更新了项目文件的所有失败后,我决定暂时放弃,因为我甚至无法开始编译。

将VS2010用于新的.net项目我发现IDE尝试更像Eclipse,但它仍然在做一些蠢事,比如在我上次点击的视图部分打开代码文件 - 比如输出或监视变量窗口。

我经常遇到MS符号服务器的问题,专门转到MS符号服务器的调试/模块功能似乎以某种方式解决了这个问题,并节省了符号服务器列表的时间。