Bri*_*ker 22 c++ gcc libstdc++ c++11
我可以使用c ++ 11中的任何东西并期望编译的二进制文件在旧系统上运行吗?如何判断c ++ 11的哪些部分是libstdc ++的一部分.那么实际编译成二进制文件的是什么?也许我不完全理解这些事情是如何起作用的.c ++ 11是否会破坏ABI与旧库的兼容性?
清晰的一个例子:
假设我编译了一个使用auto的程序和基于for循环的新范围.这些东西看起来应该适用于具有旧c ++运行时的系统,因为它们分解为在这些机器上有效的c ++.但是,使用像regex这样的东西应该在旧系统上中断,因为它不会在运行时.
我还没有测试过我的理论,因为我无法访问兼容c ++ 11的编译器,而且我的谷歌搜索也没有用.
Jed*_*aaf 13
你是对的.代码本身编译为可以在任何具有C++编译器的平台上运行.新的语言构造(远程for,新的关键字auto等)使用新的编译器进行编译,以便在旧系统上正常工作.
但是,如果您尝试将使用新符号(如正则表达式)的代码链接到旧库,则无论您是静态链接还是动态链接,都会遇到问题,因为旧库没有新符号.
假设您的代码使用新符号: