首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >开发跨平台的C++11代码

开发跨平台的C++11代码
EN

Stack Overflow用户
提问于 2012-01-14 20:21:14
回答 6查看 1.9K关注 0票数 2

使用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更好吗?

谢谢。

EN

回答 6

Stack Overflow用户

回答已采纳

发布于 2012-01-14 21:10:27

正如您已经了解到的那样,C++11还没有准备好进入黄金时间。

不仅解析阶段仍在由不同的编译器解决,而且还有一个问题,即一些编译器虽然似乎接受了一些功能,但在您当前拥有的版本中可能存在怪癖和错误。

我能想到的唯一合理的方法是首先选择你想要使用的编译器:

  • 您可以在Windows上使用gcc/Clang (带有libstdc++),但是这会阻止您与VC++
  • 编译的库进行交互。另一方面,您可以验证您的代码是否适用于gcc/Clang和VC++(如果需要,还可以验证其他几个库)

一旦确定了要使用的编译器,就必须选择要使用的C++11特性,这些特性可以在所有这些编译器上运行。

  • templates
  • VC++在这里可能更高级,
  • Clang没有lambda,但有移动语义和可变lambda是最落后于

而且您需要设置一个包含所有这些编译器的测试套件,并且在您的目标平台上设置测试套件,并特别注意可能出现的代码生成问题。我推荐在Linux par示例中使用Valgrind,并且可能在Windows上使用Purify (或等效的),因为它们都有助于发现那些运行时问题。

请注意,VC++和g++可能都有默认接受的非标准扩展,而且它们对代码的解释也可能基于以前的C++11草案。

老实说,对于生产使用,我认为这仍然有点不可靠。

票数 1
EN

Stack Overflow用户

发布于 2012-01-14 20:27:47

您可以使用GCC在Windows上编译代码。你不需要使用微软的编译器。

如果你现在想轻松地使用C++11特性,这将是你最好的解决方案。微软还没有实现大量的C++11,而且也不是所有的VS11都是这样。

否则,是的,您显然可以只使用编译器实现所支持的C++11特性的子集,这些特性表示最小公分母。您需要检查并确保这是Microsoft针对所有新功能的编译器,而不是仅仅假设它是。

我不相信GCC已经做到了所有的事情,也不能保证他们实现的所有功能都是完美的,并且与微软的100%匹配。编写完全可移植的代码是困难的,而且一直是困难的。

只使用C++03特性显然是一种安全的方法,但是它不允许您使用C++11特性(显然)。不管是不是,这是一个只有你能做出的决定。

票数 2
EN

Stack Overflow用户

发布于 2012-01-14 20:28:38

如果你正在写新的代码,你可能不会在明天发布它。

所以为你的发布日期做好计划吧。有些功能被接受的速度会比其他功能更慢。大多数很难实现的特性和重复的特性(比如range for循环)。

我不会太担心使用新的库功能,这些功能已经在所有编译器中得到了很好的支持。

目前没有任何最小的共同点,因为微软决定首先专注于库,而其余的已经(主要)用于语言功能。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/8862161

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档