我可以安全地混合使用-std = c ++ 11和-std = c ++ 14编译的库吗?

时间:2019-03-22 09:49:53

标签: c++ c++11 c++14

在C ++ 98和C ++ 11之间过渡的早期,我记得将C ++ 98库和C ++ 11库链接在一起时会遇到一些与ABI相关的麻烦。 (例如,请参见Mixing different C++ standards with GCC和该问题的答案。)

我有一个特殊的情况,我的部分代码需要使用仅支持C ++ 11的工具进行编译,而另一部分使用C ++ 14的功能并可以使用支持它们的标准g ++进行编译。 我可以将代码的每个部分放入其自己的库中并进行链接。但是我想知道:总体而言,C ++ 11和C ++ 14之间是否有任何差异会导致此处的问题(例如,与ABI相关的问题)?

1 个答案:

答案 0 :(得分:4)

gcc的混合是一个stdc ++决定(甚至不是gcc)。当您将宏设置为不同的状态时,它们确实是不兼容的,但是如果您始终设置宏,则可以将C ++ 98与C ++ 11与libstdc ++混合使用。例如,在RedHat上,默认的gcc编译器是旧的,并且不支持C ++ 11,因此默认情况下,使用较新的编译器的devtools会将宏设置为旧的ABI,以便它们始终兼容。

因此,如果您与stdc ++库一致,那么没问题。在libc ++,VS上没问题...