我目前正在从Visual Studio 2008迁移到2010.我的软件大量使用Boost及其TR1功能。我现在得到了很多编译器错误,因为VC10有自己的TR1实现。
我知道我可以使用_HAS_CPP0X
开关禁用Microsoft的TR1实现(请参阅here),但我不确定这是否也会禁用将来可能感兴趣的其他功能。
所以,我想知道哪个是更好的TR1实现:来自Boost的那个还是来自Microsoft的那个?有任何差异吗?禁用Microsoft实现有任何缺点吗?
答案 0 :(得分:1)
如果您的代码无法使用VC10的标准库进行编译,那么这可能表明它不符合标准。 VC10中的标准库来自Dinkumware,这些人在实现标准库时并不坏。 (PJP曾经是lib工作组的主席。)在将每个问题视为特定于VC的问题之前,我会仔细研究每个问题,以免你可能与以后不兼容。
另外,TTBOMK,VC10不只是附带TR1,而是使用C ++ 1x(例如,std::shared_ptr
而不是std::tr1::shared_ptr
; ICBWT),所以boost和VC10的库实际上不是完全可比。
答案 1 :(得分:0)
第一个:
您应该能够并排使用Boost和TR1。如果一切都配置正确并且您没有弄乱using namespace
,则不会出现任何错误。
C ++ 11 提供类似auto
关键字(more info)的功能,或者在声明(more info)Boost可以执行的类属性初始化提供。
另一方面, Boost 提供的不仅仅是他们对C ++ 11功能的实现。本质上,Boost是一组库,它们被认为是添加到C ++标准中的。
当谈到两者都提供的功能(如shared_ptr)时,我建议使用Boost:
我的建议就是在你绝对需要的时候使用C ++ 11,在所有其他情况下使用Boost。