使用C++03可以(现在仍然可以)编写跨平台的代码,在Windows、Linux和Mac之间共享C++代码库。
现在,C++11的情况如何?似乎不同的C++编译器实现了不同的C++11特性。为了构建跨平台的C++11代码,将MSVC10 (VS2010)作为一种“最小公分母”是否安全?也就是说,如果我们将批准的C++11特性限制在MSVC10实现的特性上,那么最终得到的C++11代码是否可以用GCC编译(因此在Linux和Mac上都可以使用)?
或者,如果我们需要跨平台代码,那么等待C++11编译器成熟并坚持使用C++03更好吗?
谢谢。
发布于 2012-01-14 21:10:27
正如您已经了解到的那样,C++11还没有准备好进入黄金时间。
不仅解析阶段仍在由不同的编译器解决,而且还有一个问题,即一些编译器虽然似乎接受了一些功能,但在您当前拥有的版本中可能存在怪癖和错误。
我能想到的唯一合理的方法是首先选择你想要使用的编译器:
一旦确定了要使用的编译器,就必须选择要使用的C++11特性,这些特性可以在所有这些编译器上运行。
的
而且您需要设置一个包含所有这些编译器的测试套件,并且在您的目标平台上设置测试套件,并特别注意可能出现的代码生成问题。我推荐在Linux par示例中使用Valgrind,并且可能在Windows上使用Purify (或等效的),因为它们都有助于发现那些运行时问题。
请注意,VC++和g++可能都有默认接受的非标准扩展,而且它们对代码的解释也可能基于以前的C++11草案。
老实说,对于生产使用,我认为这仍然有点不可靠。
发布于 2012-01-14 20:27:47
您可以使用GCC在Windows上编译代码。你不需要使用微软的编译器。
如果你现在想轻松地使用C++11特性,这将是你最好的解决方案。微软还没有实现大量的C++11,而且也不是所有的VS11都是这样。
否则,是的,您显然可以只使用编译器实现所支持的C++11特性的子集,这些特性表示最小公分母。您需要检查并确保这是Microsoft针对所有新功能的编译器,而不是仅仅假设它是。
我不相信GCC已经做到了所有的事情,也不能保证他们实现的所有功能都是完美的,并且与微软的100%匹配。编写完全可移植的代码是困难的,而且一直是困难的。
只使用C++03特性显然是一种安全的方法,但是它不允许您使用C++11特性(显然)。不管是不是,这是一个只有你能做出的决定。
发布于 2012-01-14 20:28:38
如果你正在写新的代码,你可能不会在明天发布它。
所以为你的发布日期做好计划吧。有些功能被接受的速度会比其他功能更慢。大多数很难实现的特性和重复的特性(比如range for循环)。
我不会太担心使用新的库功能,这些功能已经在所有编译器中得到了很好的支持。
目前没有任何最小的共同点,因为微软决定首先专注于库,而其余的已经(主要)用于语言功能。
https://stackoverflow.com/questions/8862161
复制相似问题