内部 STL 容器结构能否在下一个标准中发生变化?

Can internal STL container structure change in next standard

本文关键字:标准 变化 下一个 STL 结构 内部      更新时间:2023-10-16

问题就在这里:

//dynamic_module1, compiled with C++11
std::vector<int> some_function();

//dynamic_module2, compiled with C++14
int main() {
    ...//import some_function from dynamic_module1
    std::vector<int> some = some_function();
    ...
}

正确吗?我有什么保证,STL容器的内部结构是相同的:
1) 如果模块是由具有相同标准版本的不同编译器编译的?
2)如果模块是由相同的编译器编译的,但具有不同的标准版本?

你对这种兼容性没有任何正式的保证(两个不同版本的标准之间的标准库容器,甚至两个不同版本的C++编译器,当然还有两个不同的C++编译器)。

在实践中,如果对

两个不同的标准使用相同的编译器(和版本)(例如,如果使用相同的g++进行编译,一方面使用g++ -std=c++11,另一方面使用g++ -std=c++14),您可能会(但不确定)获得一些兼容性。

请注意,在实践中(在 Linux/Debian/x86-64 上),libstdc++取决于用于编译代码的 GCC 版本。因此,GCC 4.8 和 GCC 4.9 的标准C++库略有不同(它们碰巧在大多数情况下是兼容的,但并非总是如此)。

我不知道Microsoft Visual C++实际上发生了什么,因为我从未使用过Windows。