下一个标准可以改变内部STL容器结构吗

Can internal STL container structure change in next standard

问题在这里:

//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。