Nav*_*een 30 c++ mfc containers stl
以前,我曾经使用MFC的集合类CArray和CMap.过了一会儿,我换了STL容器,并且已经使用了一段时间.虽然我发现STL要好得多,但我无法明确指出它的确切原因.一些推理如:
我可以提出的唯一原因是我可以在容器上使用算法.我在这里缺少任何其他原因 - 是什么让STL容器比MFC容器更好?
Mic*_*urr 46
VC++产品部经理Ronald Laeremans甚至表示将在2006年6月使用STL:
坦率地说,团队会给你相同的答案.MFC集合类仅用于向后兼容.C++有一个集合类标准,那就是Standards C++ Library.在MFC应用程序中使用任何标准库没有技术缺陷.
我们不打算在这方面做出重大改变.
Ronald Laeremans
代理产品部经理
Visual C++团队
但是,有一段时间我正在处理在Windows安装阶段运行的一些代码,我不允许使用STL容器,但被告知要使用ATL容器(实际上CString特别是,我猜这不是真的一个容器).解释是,STL容器对运行时位具有依赖性,这些位在代码必须执行时可能实际上不可用,而ATL集合不存在这些问题.这是一个相当特殊的场景,不应该影响99%的代码.
fbr*_*eto 34
STL容器:
Dar*_*ryl 22
使用STL以外的东西本身并不是错误的.
MFC的一个好处是,那里仍然有大量的MFC代码.其他答案谈论第三方兼容性.不要忘记第三方基于MFC的东西.
我总是喜欢使用更多的标准/兼容库,因为我可能有未来的项目,我可以重用一部分代码.我不知道未来的库将使用什么库,但如果我使用标准/兼容的东西,我有更好的机会使我的代码可重用.
而且,我使用的库越多,我就越舒服,越快.如果我要花时间去学习图书馆,我想确保它能够保持不变并且与特定的平台或框架无关.
当然,我说所有这些都假设我的选择在性能,功能和易用性方面非常相似.例如,如果MFC类在这些方面有足够的改进,我会改用它们.
事实上,您也可以在某些 MFC 容器上使用 STL 算法。然而,STL 容器是首选的另一个非常实际的原因:许多第三方库(Boost、arabica、Crypto++、utf-cpp...)旨在与 STL 一起使用,但对 MFC 容器一无所知。
MFC 容器派生自赋值运算符CObject,CObject并将赋值运算符设为私有。我在实践中发现这很烦人。
std::vector,取消链接 CArray,保证内存块是连续的,因此您可以轻松地与 C 编程接口互操作:
std::vector<char> buffer;
char* c_buffer = &*buffer.begin();
Run Code Online (Sandbox Code Playgroud)