C++ 11与现有库/框架的兼容性

Wal*_*orf 10 c++ shared-libraries c++11

我想知道一些我还没有找到令人信服的答案的东西.

情况:

  • 在没有启用c ++ 11的情况下编译的具有一些库(例如gtkmm)的系统.
  • 启用了C++ 11编译的应用程序.
  • 两者都编译并链接到相同的GCC版本/环境.
  • 应用程序对库使用std :: string和std :: vector进行了一些函数调用.

std :: string和std :: vector都支持移动语义,这很可能意味着它们与非C++ 11变体不是二进制兼容的.但是应用程序和库都使用相同的编译器和标准库构建,因此如果lib能够识别并支持它,那就不会那么奇怪了.

上述情况是否安全,或者是否真的需要使用C++ 11标志编译所有内容,即使使用相同的构建环境?

Uld*_*isK 5

这个页面专门用于g ++ abi打破c ++ 11到4.7版本.第一句话是:

C++ 98语言与C++ 11语言ABI兼容,但库中的几个地方打破了兼容性.这使得将C++ 98对象与C++ 11对象链接起来很危险.

虽然有一些例子,其中启用c ++ 11不会影响ABI兼容性:一个例子是Qt,你可以自由地将c ++ 11启用的构建与c ++ 03构建混合.