gpt4 book ai didi

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

转载 作者:搜寻专家 更新时间:2023-10-31 00:46:54 27 4
gpt4 key购买 nike

我正在考虑将我们的商店从 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 并不得不加载错误字符串解析器帮助程序,该帮助程序为我推断出更高级别的名称,以便错误消息可能变得有点有用。现在,10 年过去了,我又看到诊断如此深刻和令人费解以至于毫无意义,我不知道真正的问题是什么。在一种情况下,我试图在 multimap 中插入一个新元素:

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 的“有效 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

最佳答案

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

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

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

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com