5

我目前正在从 Visual Studio 2008 迁移到 2010。我的软件大量使用了 Boost 及其 TR1 功能。我现在遇到很多编译器错误,因为 VC10 有它自己的 TR1 实现。

我知道我可以使用_HAS_CPP0X开关禁用 Microsoft 的 TR1 实现(请参阅此处),但我不确定这是否还会禁用将来可能有趣的其他功能。

所以,我想知道 TR1 的哪个实现更好:Boost 的那个还是 Microsoft 的那个?有什么区别吗?禁用 Microsoft 实施是否有任何缺点?

4

2 回答 2

1

如果您的代码不能使用 VC10 的标准库编译,那么这可能表明它不符合标准。VC10 中的标准库来自 Dinkumware,这些家伙在实现标准库方面也不错。(PJP 曾经是 lib 工作组的主席。)在将其视为 VC 特定问题之前,我会非常仔细地研究每个问题,以免您可能无法与未来兼容。

此外,TTBOMK、VC10 不仅带有 TR1,而且带有 C++1x(例如,std::shared_ptr而不是std::tr1::shared_ptr; ICBWT),因此 boost 和 VC10 的库实际上并不完全可比。

于 2010-08-17T21:33:51.813 回答
0

首先:
您应该能够并排使用 Boost 和 TR1。如果一切配置正确并且您没有乱来,using namespace您将不会收到任何错误。

C++11提供了 Boost 无法提供的功能,例如auto关键字(更多信息)或类属性在声明期间的初始化(更多信息)。

另一方面,Boost提供的不仅仅是 C++11 特性的实现。本质上,Boost 是被认为是添加到 C++ 标准中的库的集合。

当涉及到两者都提供的功能(如shared_ptr)时,我建议使用 Boost:

我的建议是在绝对需要时使用 C++11,并在所有其他情况下使用 Boost。

于 2013-08-17T08:50:45.263 回答