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

时间:2015-04-10 10:49:04

标签: c++ visual-c++ dll stl containers

问题在于:

//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)如果模块是由相同的编译器编译的,但具有不同的标准版本?

1 个答案:

答案 0 :(得分:4)

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

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

请注意,在实践中(在Linux / Debian / x86-64上),g++ -std=c++14取决于您用于编译代码的GCC版本。所以GCC 4.8和GCC 4.9的标准C ++库略有不同(大部分时间都是,而总是)。

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