c++ - 开发跨平台 C++11 代码

标签 c++ cross-platform c++11

使用 C++03,过去(现在仍然)可以使用 MSVC 和 GCC 编写跨平台代码,在 Windows、Linux 和 Mac OS X 之间共享 C++ 代码库。

现在,C++11 的情况如何?看来不同的C++编译器实现了C++11的不同功能。要构建跨平台的 C++11 代码,将 MSVC10 (VS2010) 作为一种“最小公分母”是否安全?即,如果我们将批准的 C++11 功能限制为 MSVC10 实现的功能,生成的 C++11 代码是否可以与 GCC 编译(因此可以在 Linux 和 Mac OS X 上使用)?

或者如果我们需要跨平台代码,等待 C++11 编译器成熟并坚持使用 C++03 是否更好?

谢谢。

最佳答案

您可以使用 GCC 编译 Windows 代码。您不需要使用 Microsoft 的编译器。

如果您现在想轻松地使用 C++11 功能,那么这将是您的最佳解决方案。 Microsoft 尚未实现大量 C++11,而且并非所有内容都计划在 VS11 中。

否则,是的,您显然可以只使用代表最低公分母的编译器实现支持的 C++11 功能的子集。您需要检查并确保这是 Microsoft 的所有新功能的编译器,而不是仅仅假设它是这样的。
我不相信 GCC 已经解决了所有问题,并且不能保证他们对所有功能的实现都是完美的并且与 Microsoft 的 100% 匹配。编写完全可移植的代码一直以来都是很困难的。

仅使用 C++03 功能显然是安全的方法,但它不允许您使用 C++11 功能(显然)。重要与否重要的是只有您才能做出的决定。

关于c++ - 开发跨平台 C++11 代码,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8862161/

相关文章:

c++ - 为什么这个来自模板类型 "stack"类的 isEmpty() 没有继承到 C++ 中模板类型的派生类 "specialStack"?

c++ - 如何获取衍生程序的返回码

c++ - c++ boost库中的累加器有什么用?

c++ - 在不使用数据库的情况下在进程之间共享设置?

c - "PTHREAD_RWLOCK_INITIALIZER undeclared"构建RTEMS错误

c++ - 从 std::set 中提取仅 move 类型

c++ - 什么是混叠以及它如何影响性能?

c++ - 为什么立即函数在默认情况下不是 noexcept,为什么允许它们是 noexcept(false)?

android - InApp Purchase 内容在多个移动平台(iOS 和 Android)上的兼容性。

c++11 - 使用 valgrind Massif 工具,未创建结果文件